私が理解しているように、ファイルが書き込まれているとき、ファイルへの書き込みプロセスは排他ロックを取得します。したがって、他のプロセスはこのファイルにアクセスして読み取ることができません。
上記の知識があるため、ブラウザがまだビデオをダウンロードしているときに、メディアプレーヤーでビデオを再生する方法を理解できません。
私が理解しているように、ファイルが書き込まれているとき、ファイルへの書き込みプロセスは排他ロックを取得します。したがって、他のプロセスはこのファイルにアクセスして読み取ることができません。
上記の知識があるため、ブラウザがまだビデオをダウンロードしているときに、メディアプレーヤーでビデオを再生する方法を理解できません。
回答:
あなたの理解は間違っています。複数のLinuxプロセスが同じファイルに一度に書き込むことができます(プロセスがそのファイルの異なるセグメントを上書きする場合を除いて、その後の動作は不特定になる場合があります)。また、他の一部のLinuxプロセス(ブラウザなど)は、に書き込まれたファイルを読み取ることができます。
あなたはそれを避けるために慣習を採用することができます。たとえば、アドバイザリファイルロック(関連するすべてのプログラムが行う規則を採用)を使用できます。たとえば、flock(2)、lockf(3)などを使用します。その規則にアクセスして、そのファイルにアクセス(または書き込み)します。許可機構を使用する場合があります(たとえば、システムユーザーをsetuidプログラム専用にするなど)。
StackOverflowでこれとその回答も参照してください(非推奨の強制ロック Linux固有のメカニズムについて言及されているものもあります)。ACIDプロパティについて読み、いくつかのデータベース(sqlite、PostGreSQL、MongoDBなど)またはいくつかのインデックス付きファイル(gdbm)の使用を検討してください。
私はWindowsを知りませんが、同じファイルへの同時アクセスまたは書き込みを許可しないという噂を聞きました。
ファイルは通常ロックされていません-UNIXファイルロック。また、ファイルのリーダーは複数あるがライターは1つだけである場合もよくあります。複数のライターがある場合にのみ問題が発生します。
また、ほとんどのビデオファイル形式(特にWeb上)はストリーミング可能です。つまり、ビデオ全体を再生する必要はありません。
Unix OSは強制ロックを使用しません(Gnu / LinuxはUnix、他の例はUNIX、BSD、Mac OSXです)。可能な限り回避されるようなロック。
他のいくつかのOSは常に強制ロックを使用しています(特にMicrosoftのWindows OS)。これにより、完全にダウンロードされるまで再生が停止します。また、開いている(アプリケーションが存在する)ファイルまたはディレクトリの名前を変更することも停止します。しかし、Unixでは問題ありません。アプリケーションでロックが必要な場合は、それを使用できます。しかし、通常はそうではありません。