fsync不会将数据写入文件

时间:2013-03-17 09:37:18

标签: c fsync

我有两个(POSIX)线程写入这样的日志文件:

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

该文件在main()中以fopen()打开,模式为“a”。当进程正在运行时,我看不到文件中出现cattail的任何内容,但是在进程终止且文件为fclose()之后,这些行都在那里

我做错了什么?

2 个答案:

答案 0 :(得分:8)

我想你需要调用fflush()来刷新已更改的文件系统。

另见difference between fsync() and fflush()

答案 1 :(得分:1)

由于您在C中使用FILE句柄,因此需要先调用fflush()将数据从C / C ++缓冲区刷新到内核缓冲区。除非您还希望确保数据到达底层物理存储,特别是出于持久性问题,否则不需要fsync