2

私は、観察されたフォルダーロジックのようなもので、cの下でfopenを使用して大きなファイルを開きます。ファイルが監視対象のフォルダーに完全にコピーされたらすぐに、ファイルを fopen (または少なくとも fread) したいと思います。

別のプロセスがファイルに書き込んでいるかどうかを検出するにはどうすればよいですか? standard-cでそれは可能ですか?

ありがとう

4

2 に答える 2

3

標準の C でそれを行う方法はありません。できる最善の方法は、ファイルの変更が停止したときにヒューリスティックに気付くことです。たとえば、ファイルの最後の数ブロックを読み取り、 n秒間スリープしてから、ブロックを再度読み取り、以前の読み取りと比較します。また、ファイルの終わりのシーク ポインターを監視して、移動が停止するタイミングを確認することもできますが、大きなファイル (signed long に収まるサイズよりも大きいサイズ) の場合は、移植可能にするために POSIX 関数 ftello() が必要です。

于 2012-04-05T20:14:38.993 に答える
-1

ちょっと「失礼」ですが、書き込みモードで開こうとし続けることができます。他のファイルによって書き込まれている限り、fopen失敗します。このようなもの:

FILE* f;
while( (f = fopen( fname, "w" )) == NULL ) {
  sleep( 100 );  // we want to be moderately polite by not continually hitting the file
}
于 2012-04-05T20:30:56.737 に答える