Ich beschäftige mich mit einer Situation, in der ich den Status einer Anwendung dauerhaft speichern möchte, die viele Prozesse und viele Threads innerhalb dieser Prozesse hat. Normalerweise würde dies einen umfangreichen Einsatz von Sperren erfordern, um sicherzustellen, dass es keine Konflikte gibt.
Ich möchte dies vermeiden, indem ich die Daten in einer Datei im O_APPEND-Modus speichere. Auf diese Weise sind Schreibvorgänge in die Datei atomar, solange ich sicherstelle, dass die Daten <4 KB groß sind. Wenn ich nur Anhänge-Datenstrukturen verwende, habe ich eine sperrenfreie Lösung.
Damit dies jedoch funktioniert, muss ich den Speicherort der Daten in der Datei kennen, nachdem ich in diese Datei geschrieben habe. Das Problem, auf das ich stoße, ist, dass ich keinen Systemaufruf finden kann, der in eine Datei schreibt und mir dann den Offset innerhalb dieser Datei angibt, in die geschrieben wurde.
Ich kann einen Schreibvorgang gefolgt von einem Suchvorgang verwenden, um diesen Speicherort zu ermitteln. Dies ist jedoch nicht sicher, wenn ein anderer Thread denselben Dateideskriptor verwendet. Daher müsste ich den Schreibvorgang mit einem Mutex schützen, was meinen Bemühungen, Sperren zu vermeiden, zuwiderläuft.
Beim Untersuchen der Manpages für write, writev, pwrite und prwritev wurde nichts gefunden, das einen Schreibvorgang ausführen und mir dann den Offset nach dem Schreibvorgang als einzelnen Systemaufruf mitteilen würde, und ich bin mir völlig bewusst, dass dies möglicherweise nicht der Fall ist. Habe ich etwas übersehen?