Hi,
ist ein paralleler Schreibzugriff auf eine Datei problemlos möglich?
Das fordert doch geradezu eine Antwort im Stile Radio Eriwans heraus: im Prinzip nicht, aber ...
Ich habe ca. 40-200 Prozesse,
Hier wird nur zwischen "Einer" und "Mehrere" unterschieden, denn sobald es mehr als ein paralleler Zugiff ist, faengt der Aerger an.
die sich in einer Datei registrieren
sollen. Die Datei hat einen strukturierten Aufbau:
So, da waeren wir ja schon beim "aber" von oben.
| 30 Zeichen | 50 Zeichen | 6 Zeichen |
| Alias | verschiedene Parameter | Prozess ID |
Jeder Alias ist einzigartig.
Kannst Du das garantieren?
Wenn Du das auch noch ueberpruefen kannst, brauchst Du tatsaechlich keinen Locking Mechanismus.
Jeder Prozess soll seinen Eintrag in kurzen Intervallen aktualisieren.
Wenn der Prozess noch nicht existiert, dann hängt er sich mittels
O_APPEND hinten dran.
Was meint Prozess? Ein regulaerer Prozess? Der Alias ist dann die PID? Dann achte darauf, das Du einem evt Integeroverflow begegnest, denn wenn die PIDs am Ende angelangt sind, fangen sie evt wieder von vorne an.
Es gibt aber auch nur einen dokumentierten Fall, ist also _sehr_ unwahrscheinlich ;-)
Nun möchte ich die Datei _nicht_ locken, damit es zu keinen Warte-
zuständen kommt.
Das ist nun wirklich kein Grund! Das lineare Suchen in der Datei nach dem passendem Eintrag dauert mit Sicherheit laenger als ein Locking fuer das Einsortieren! ;-)
Aber Datei-Locking ist nicht sehr einfach und in den raren Faellen wenn es vermieden werden kann, sollte es auch vermieden werden. KISS ("Keep It Simmple, Stupid!") ist ein gutes Prinzip.
Kann die Datei fehlerhaft geschrieben werden, wenn
die Prozesse gleichzeit nur die Zeile aktualisieren, in der sie
registriert sind?
Wie gesagt: wenn Du dafuer Sorge tragen kannst, das sie wirklich nur die eine Zeile beharken und sich ansonsten nicht gegenseitig in's Gehege kommen sehe ich da keine Probleme.
Worauf muss ich bei meinem Vorhaben insbesondere achten?
Das Du hier nicht testen kannst, denn es ist durchaus moeglich, das sich die einzelnen Prozesse aus reinem Zufall nicht in's Gehege kommen (Du kannst halt nicht auf Fehler testen, nur auf Funktion), also muss schon das Design stimmen.
so short
Christoph Zurnieden