4

次のようなログ ファイルに書き込む 2 つの (POSIX) スレッドがあります。

pthread_mutex_lock(&log_mutex);
fprintf(LOG, "something...\n");
fsync(fileno(LOG));
pthread_mutex_unlock(&log_mutex);

ファイルはモード "a" でmain()開かれます。プロセスが実行されている間、またはプロセスが終了してファイルが-ed になった後fopen()でも、ファイルに何も表示されませんが、行はすべてそこにあります。cattailfclose()

私は何を間違っていますか?

4

2 に答える 2

8

fflush()変更をファイルシステムにフラッシュするために呼び出す必要があると思います。

fsync()とfflush()の違いも参照してください。

于 2013-03-17T09:42:23.787 に答える
1

C で FILE ハンドルを使用しているため、最初に fflush() を呼び出して C/C++ バッファーからカーネル バッファーにデータをフラッシュする必要があります。特に耐久性の問題のために、データが基礎となる物理ストレージに到達することを確認したい場合を除き、fsync は実際には必要ありません。

于 2013-09-05T21:44:23.723 に答える