我有两个(POSIX)线程写入这样的日志文件:
pthread_mutex_lock(&log_mutex);
fprintf(LOG, "something...\n");
fsync(fileno(LOG));
pthread_mutex_unlock(&log_mutex);
该文件在main()
中以fopen()
打开,模式为“a”。当进程正在运行时,我看不到文件中出现cat
或tail
的任何内容,但是在进程终止且文件为fclose()
之后,这些行都在那里
我做错了什么?
答案 0 :(得分:8)
我想你需要调用fflush()
来刷新已更改的文件系统。
答案 1 :(得分:1)
由于您在C中使用FILE句柄,因此需要先调用fflush()将数据从C / C ++缓冲区刷新到内核缓冲区。除非您还希望确保数据到达底层物理存储,特别是出于持久性问题,否则不需要fsync