我认为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()
. 有什么输入吗?