3

プロセスがファイルから読み取ろうとしている場合、他のプロセスがファイルに書き込んだり削除したりしないように、コード(C言語)からどのように確認しますか(ファイルを削除するためのシステムコマンドを含む)?

また、これはすべてのOS(Windows、Linux、Solaris、HP-UX、VxWorksなど)で実現できますか?

4

4 に答える 4

3

編集:Unix/Linuxについて答えます

gsprや他の人が言ったように、、などを使用したファイルロックを見てくださいfcntl。ただし、これらはADVISORYLOCKINGメソッドflockであることに注意してください。

これは何を意味するのでしょうか?これは、現在ファイルまたはその一部にアクセスしていることを他のプロセスに警告できることを意味しますが、それらがあなたを無視してファイル全体に書き込むことを強制的に防ぐことはできません

COMPULSORYロッキングプリミティブはありません。アクセス許可を有利に使用できますが、完全な保証はありません。rootユーザーはいつでも制限を上書きできます。それを回避する方法はないと思います。

于 2010-10-08T13:37:08.563 に答える
1

POSIXシステムについては、をご覧くださいfcntlflockPOSIXの一部ではないと思いますが、興味深いこともあります。

于 2010-10-08T12:43:54.883 に答える
0

READ共有権限でファイルを開く必要があります。つまり、ファイルを開こうとしている他のユーザーは、読み取りアクセスしか取得できません。@Pointyが言うように、これはOS固有であり、Windows、Linuxなどでは、おそらくこれを個別にコーディングする必要があります。ただし、最近のほとんどのOSはこれをサポートする必要があります。

于 2010-10-08T12:40:59.670 に答える
0

ファイルをコピーして変更を加えてから、元のファイルに名前を変更します。

別の方法は、ファイルがまだ存在しない場合、排他フラグを使用してファイルを作成し、それをファイルシステムから削除することです。書き込みを実行してから、ファイルシステムにハードリンクします(現在、開いているiノードとしてのみ存在します)。/procソースパスに利用できます。

于 2010-10-08T13:56:52.950 に答える