Ablauf beim Zugriff auf Dateien



  • Hallo,

    ich habe Probleme mit dem Zugriff auf eine Datei von mehreren Programmen.

    Programm 1 oeffnet Datei zum lesen
    - Taskwechsel
    Programm 2 oeffnet Datei zum schreiben
    - Taskwechsel zurueck zum Programm 1

    Behaelt nun Programm 1 eine Kopie der alten Version der Datei oder liest Programm 1 sofort die neuen Daten die Programm 2 geschrieben hat.
    noch komplizierter
    wenn P1 - P9 in Datei lesen
    und P10 darauf schreibt.

    Die Datei zu sperren beim schreiben ist klar, ich will nur grundsaetzlich wissen wie die Zugriffe ablaufen.

    2. Kann ich eine Datei im Speicher lassen. d.h. Ich lese/schreibe zyklisch eine Datei, damit diese nicht staendig auf die Festplatte geschrieben werden muss (Datenverlust beim beenden des Programms kein Problem) will ich die Datei eventuell im Speicher lassen.
    (mit all den Formatiereungen die die Datei enthaelt)

    Danke
    worst_case



  • Abend,

    kann mir keinen den Ablauf erklären, oder sagen wo ich nachlesen kann ??

    Danke
    worst_case



  • normalerweise müssten alle lese-tasks den aktuellen stand der datei sehen (wenn sie z.b. mit fread() bytes auslesen), nachdem eine schreib-task die datei verändert hat. dafür, dass (physikalische) schreibzugriffe auf die datei auf der platte nicht allzu häufig stattfinden, sollte ein puffermechanismus in deinem OS sorgen. wenn du den durchsatz verbessern willst, köntest du z.b. 'file mapping' benutzen (ist z.b. in windows integriert)
    --> http://msdn2.microsoft.com/en-us/library/aa366537.aspx



  • 🙂 <-- vergessen



  • Abend,

    das ist mir schon klar, das nach dem schreiben sofort der neue Inhalt gelesen werden kann, egal ob die Datei auf der Festplatte geschrieben ist oder nicht.

    Mein Interesse geht dahin.Programm 1 öffnet Datei zum lesen (open)
    Taskwechsel
    Programm 2 schreibt in Datei
    Taskwechsel zu Programm 1
    Programm 1 liest aus Datei ...
    was "alten Stand oder neuen Stand"

    Danke
    worst_case



  • worst_case schrieb:

    was "alten Stand oder neuen Stand"

    ich tippe mal auf 'neuen stand', obwohl, so genau kann man das nicht sagen. die C-library, fread, fwrite, ect. arbeiten ja auch mit sogenanten 'streams', die selber buffern und nix vom taskswitching mitkriegen. hierbei hilft eventuell auf 'unbuffered I/O' umzustellen mit 'setvbuf()'. probier's doch einfach mal aus.
    🙂


Anmelden zum Antworten