4

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

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

该文件main()fopen()“a”模式打开。在进程运行时,我看不到文件中出现的任何内容,cat或者tail尽管在进程终止并且文件被fclose()-ed 之后,这些行都在那里。

我究竟做错了什么?

4

2 回答 2

8

我想您需要调用fflush()以将更改刷新到文件系统。

另请参阅fsync() 和 fflush() 之间的区别

于 2013-03-17T09:42:23.787 回答
1

由于您在 C 中使用 FILE 句柄,因此您需要首先通过调用 fflush() 将数据从 C/C++ 缓冲区刷新到内核缓冲区。fsync 并不是真正需要的,除非您还想确保数据到达底层物理存储,尤其是考虑到持久性问题

于 2013-09-05T21:44:23.723 回答