fsync()私はfflush()内部的にそう思ったのでfsync()、ストリームで使用しても問題ありません。しかし、ネットワーク I/O で実行すると予期しない結果が得られます。
私のコードスニペット:
FILE* fp = fopen(file, "wb");
/* multiple fputs() calls like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* get fd of the FILE pointer */
fd = fileno(fp);
#ifndef WIN32
ret = fsync(fd);
#else
ret = _commit(fd);
fclose(fp);
しかし_commit()、データをフラッシュしていないようです (私は Windows で試しましたが、データは Linux のエクスポートされたファイルシステムに書き込まれました)。
コードを次のように変更したとき:
FILE* fp = fopen(file, "wb");
/* multiple fputs() calls like: */
fputs(buf, fp);
...
...
fputs(buf.c_str(), fp);
/* fflush the data */
fflush(fp);
fclose(fp);
データをフラッシュします。
_commit()と同じことをするかどうか疑問に思っていfflush()ます。入力はありますか?