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()
ます。入力はありますか?