プロセスがファイルから読み取ろうとしている場合、他のプロセスがファイルに書き込んだり削除したりしないように、コード(C言語)からどのように確認しますか(ファイルを削除するためのシステムコマンドを含む)?
また、これはすべてのOS(Windows、Linux、Solaris、HP-UX、VxWorksなど)で実現できますか?
プロセスがファイルから読み取ろうとしている場合、他のプロセスがファイルに書き込んだり削除したりしないように、コード(C言語)からどのように確認しますか(ファイルを削除するためのシステムコマンドを含む)?
また、これはすべてのOS(Windows、Linux、Solaris、HP-UX、VxWorksなど)で実現できますか?
編集:Unix/Linuxについて答えます
gsprや他の人が言ったように、、などを使用したファイルロックを見てくださいfcntl
。ただし、これらはADVISORYLOCKINGメソッドflock
であることに注意してください。
これは何を意味するのでしょうか?これは、現在ファイルまたはその一部にアクセスしていることを他のプロセスに警告できることを意味しますが、それらがあなたを無視してファイル全体に書き込むことを強制的に防ぐことはできません。
COMPULSORYロッキングプリミティブはありません。アクセス許可を有利に使用できますが、完全な保証はありません。rootユーザーはいつでも制限を上書きできます。それを回避する方法はないと思います。
POSIXシステムについては、をご覧くださいfcntl
。flock
POSIXの一部ではないと思いますが、興味深いこともあります。
READ共有権限でファイルを開く必要があります。つまり、ファイルを開こうとしている他のユーザーは、読み取りアクセスしか取得できません。@Pointyが言うように、これはOS固有であり、Windows、Linuxなどでは、おそらくこれを個別にコーディングする必要があります。ただし、最近のほとんどのOSはこれをサポートする必要があります。
ファイルをコピーして変更を加えてから、元のファイルに名前を変更します。
別の方法は、ファイルがまだ存在しない場合、排他フラグを使用してファイルを作成し、それをファイルシステムから削除することです。書き込みを実行してから、ファイルシステムにハードリンクします(現在、開いているiノードとしてのみ存在します)。/proc
ソースパスに利用できます。