2 Stimmen

Verhindern, dass Threads in dieselbe Datei schreiben

Ich implementiere ein FTP-ähnliches Protokoll im Linux-Kernel 2.4 (Hausaufgaben), und ich hatte den Eindruck, dass, wenn eine Datei zum Schreiben geöffnet ist, jeder nachfolgende Versuch, sie von einem anderen Thread zu öffnen, fehlschlagen sollte, bis ich es tatsächlich ausprobierte und entdeckte, dass es durchgeht.

Wie kann ich dies verhindern?

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

PS2: Ich muss in der Lage sein, auf bestehende Dateien zuzugreifen. Ich möchte nur verhindern, dass sie gleichzeitig geschrieben werden.

2voto

Justin Ethier Punkte 126797

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

  • Sie müssen ein Synchronisationsprimitiv wie z. B. einen Mutex verwenden, um sicherzustellen, dass die Liste thread-sicher ist.

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

1voto

Dave Punkte 5013

Dateisperren auf Systemebene sind prozessbasiert und können daher nicht verwendet werden. Sie müssen Sperren auf Prozessebene verwenden. Zum Beispiel, indem Sie einen Mutex (Lock) mit pthreads definieren.

1voto

Amardeep AC9MF Punkte 17715

Verwenden Sie die O_CREATE- und O_EXCL-Flags für open(). Auf diese Weise wird der Aufruf fehlschlagen, wenn die Datei bereits existiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X