web-dev-qa-db-ja.com

Linuxで書き込み中にファイルを読み取る

私が理解しているように、ファイルが書き込まれているとき、ファイルへの書き込みプロセスは排他ロックを取得します。したがって、他のプロセスはこのファイルにアクセスして読み取ることができません。

上記の知識があるため、ブラウザがまだビデオをダウンロードしているときに、メディアプレーヤーでビデオを再生する方法を理解できません。

9
Sorter

あなたの理解は間違っています。 いくつかのLinuxプロセスは、同じファイルに一度に書き込むことができます(そして、プロセスがそのファイルの異なるセグメントを上書きする場合を除いて、何が起こるかは不特定です)。そして他のLinuxプロセス(例:ブラウザ)は、書き込まれたファイルを読み取ることができます

あなたはそれを避けるためにコンベンションを採用することができます。たとえば、アドバイザリ ファイルロック を使用できます(関連するすべてのプログラムが行う規則を採用)。 flock(2)lockf(3) などを使用します。しかし、これは他のプロセス(規則に従っていない)がアクセス(または書き込み)することを禁止しません。 to)そのファイル。許可機構を使用する場合があります(たとえば、システムユーザーを setuid プログラム専用にする)。

StackOverflowでの thisthat の回答も参照してください(非推奨必須のロックLinux固有のメカニズムについて言及されているものもあります)。 [〜#〜] acid [〜#〜] プロパティについて読んで、データベース( sqlitePostGreSQLMongoDB など...)またはインデックス付きファイル( gdbm )。

Windowsは知りませんが、同じファイルへの同時アクセスや書き込みができないという噂を聞きました。

13

ファイルは通常ロックされていません- nix file locked 。また、ファイルのリーダーは複数あるがライターは1つだけである場合もよくあります。複数のライターがある場合にのみ問題が発生します。

また、ほとんどのビデオファイル形式(特にWeb上)はストリーミング可能です。つまり、ビデオ全体を再生する必要はありません。

4
matt.s

Unix OSは強制ロックを使用しません(Gnu/LinuxはUnix、他の例はUNIX、BSD、Mac OSXです)。可能な限り回避されるようなロック。

他のいくつかのOSは常に強制ロックを使用しています(特にMicrosoftのWindows OS)。これにより、完全にダウンロードされるまで再生が停止します。また、開いている(アプリケーションが入っている)ファイルまたはディレクトリの名前を変更するのも停止します。しかし、Unixでは問題ありません。アプリケーションでロックが必要な場合は、それを使用できます。しかし、通常はそうではありません。

2
ctrl-alt-delor