/ / Verhindern, dass Threads in dieselbe Datei schreiben - c, linux, networking, file-io

Verhindern, dass Threads in dieselbe Datei schreiben - c, linux, networking, file-io

Ich implementiere ein FTP-ähnliches Protokoll in LinuxKernel 2.4 (Hausaufgaben), und ich hatte den Eindruck, dass, wenn eine Datei zum Schreiben geöffnet ist, ein nachfolgender Versuch, sie durch einen anderen Thread zu öffnen, fehlschlagen sollte, bis ich sie tatsächlich ausprobiert und entdeckt habe, dass sie durchläuft.

Wie kann ich das verhindern?

PS: Ich benutze open (), um die Datei zu öffnen.

PS2: Ich muss auf vorhandene Dateien zugreifen können. Ich möchte nur verhindern, dass sie gleichzeitig geschrieben werden.

Antworten:

2 für die Antwort № 1

Sie können eine Liste der geöffneten Dateien führen und vor dem Öffnen einer Datei prüfen, ob sie bereits von einem anderen Thread geöffnet wurde. Einige Probleme bei diesem Ansatz sind:

  • Sie müssen ein Synchronisationselement wie ein Mutex verwenden, um sicherzustellen, dass die Liste threadsicher ist.

  • Dateien müssen aus der Liste entfernt werden, sobald Ihr Programm damit fertig ist.


1 für die Antwort № 2

Dateisperren auf Systemebene sind prozessbasiert und können daher nicht verwendet werden. Sie müssen das Sperren auf Prozessebene verwenden. Zum Beispiel durch Definieren eines Mutex (Sperre) mithilfe von Pthreads.


1 für die Antwort № 3

Verwenden Sie die Flags O_CREATE und O_EXCL zum Öffnen (). Auf diese Weise schlägt der Anruf fehl, wenn die Datei bereits vorhanden ist.