Soweit ich weiß, erhält der Prozess, der in die Datei schreibt, beim Schreiben einer Datei eine exklusive Sperre. Daher können andere Prozesse nicht zum Lesen auf diese Datei zugreifen.
Mit den oben genannten Kenntnissen kann ich nicht verstehen, wie ich ein Video im Media Player abspielen kann, wenn der Browser es noch herunterlädt.
Antworten:
Dein Verständnis ist falsch. Mehrere Linux-Prozesse können gleichzeitig in dieselbe Datei schreiben (und was dann passiert, ist möglicherweise nicht angegeben, außer wenn die Prozesse verschiedene Segmente dieser Datei überschreiben). Und ein anderer Linux-Prozess (z. B. Ihr Browser) kann eine Datei lesen, in die geschrieben wird .
Sie könnten eine Konvention verabschieden , um dies zu vermeiden . Zum Beispiel könnten Sie das Sperren von Beratungsdateien verwenden (wobei die Konvention übernommen wird, dass jedes relevante Programm dies tun sollte), z. B. mit flock (2) , lockf (3) usw. .... Dies verbietet jedoch keine anderen Prozesse (die nicht folgen) Ihre Konventionen), um auf diese Datei zuzugreifen (oder sogar in sie zu schreiben). Sie können Berechtigungsmaschinen verwenden (z. B. indem Sie einen Systembenutzer Ihrem Setuid- Programm widmen ).
Siehe auch diese und jene Antworten auf StackOverflow (einige von ihnen erwähnten die veralteten obligatorischen Sperrmechanismen für Linux). Informieren Sie sich über ACID- Eigenschaften und verwenden Sie eine Datenbank ( SQLite , PostGreSQL , MongoDB usw.) oder eine indizierte Datei ( GDBM ).
Ich kenne Windows nicht, habe aber das Gerücht gehört, dass es keinen gleichzeitigen Zugriff erlaubt oder nicht in dieselbe Datei schreibt.
quelle
Die Dateien sind normalerweise nicht gesperrt - Unix-Dateisperrung . Es ist auch ziemlich üblich, mehrere Leser von Dateien zu haben, aber nur einen Schreiber. Probleme treten nur auf, wenn Sie mehrere Autoren haben würden.
Außerdem können die meisten Videodateiformate (und insbesondere im Internet) gestreamt werden, sodass Sie nicht das gesamte Video zum Abspielen benötigen.
quelle
Unix-Betriebssysteme verwenden keine obligatorische Sperrung (Gnu / Linux ist ein Unix, andere Beispiele sind UNIX, BSD, Mac OSX). Verriegelung nach Möglichkeit vermieden.
Einige andere Betriebssysteme verwenden ständig die obligatorische Sperrung (insbesondere das Windows-Betriebssystem von Microsoft). Dadurch wird die Wiedergabe gestoppt, bis der Download vollständig abgeschlossen ist. Außerdem wird das Umbenennen einer geöffneten Datei oder eines geöffneten Verzeichnisses (in dem sich eine Anwendung befindet) gestoppt. Aber unter Unix ist es OK. Wenn eine Anwendung gesperrt werden muss, kann sie verwendet werden. Aber normalerweise nicht.
quelle