Windows verwendet standardmäßig die automatische, obligatorische Dateisperrung. UNIX verwendet standardmäßig die manuelle kooperative Dateisperrung. In beiden Fällen können die Standardeinstellungen außer Kraft gesetzt werden, in beiden Fällen jedoch normalerweise nicht.
Ein Großteil des alten Windows-Codes verwendet die C / C ++ - API (Funktionen wie fopen
) und nicht die native API (Funktionen wie CreateFile
). Mit der C / C ++ - API können Sie nicht angeben, wie das obligatorische Sperren funktionieren soll, sodass Sie die Standardeinstellungen erhalten. Der standardmäßige "Freigabemodus" verhindert in der Regel "widersprüchliche" Vorgänge. Wenn Sie eine Datei zum Schreiben öffnen, wird davon ausgegangen, dass beim Schreiben Konflikte auftreten, auch wenn Sie nie tatsächlich in die Datei schreiben. Das Gleiche gilt für Umbenennungen.
Und hier wird es noch schlimmer. Abgesehen vom Öffnen zum Lesen oder Schreiben bietet die C / C ++ - API keine Möglichkeit, anzugeben, was Sie mit der Datei tun möchten. Die API muss also davon ausgehen, dass Sie einen legalen Vorgang ausführen. Da das Sperren obligatorisch ist open
, wird ein Vorgang , der einen Konflikt zulässt , abgelehnt, selbst wenn der Code den Konflikt niemals ausführen wollte, sondern die Datei nur für einen anderen Zweck öffnet.
Wenn also Code die C / C ++ - API verwendet oder die native API verwendet, ohne sich mit diesen Problemen zu befassen, verhindern sie die maximale Anzahl möglicher Vorgänge für jede Datei, die sie öffnen, und können eine Datei nur öffnen, wenn alle möglichen Vorgänge ausgeführt werden könnte darauf ausführen, sobald geöffnet ist uneingeschränkt.
Meiner Meinung nach würde die Windows-Methode viel besser funktionieren als die UNIX-Methode, wenn jedes Programm seine Freigabemodi und Öffnungsmodi wählte und Fehlerfälle vernünftig und vernünftig handhabte. Die UNIX-Methode funktioniert jedoch besser, wenn sich der Code nicht mit diesen Problemen befasst. Leider ist die grundlegende C / C ++ - API der Windows-Datei-API nicht so gut zugeordnet, dass sie mit Freigabemodi und Konflikten beim Öffnen gut zurechtkommt. Das Nettoergebnis ist also etwas chaotisch.