【问题标题】:fsync does not write data to filefsync 不将数据写入文件
【发布时间】:2013-03-17 09:37:18
【问题描述】:

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

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

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

我做错了什么?

【问题讨论】:

标签: c fsync


【解决方案1】:

我猜你需要调用fflush() 将更改刷新到文件系统。

另见difference between fsync() and fflush()

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 2018-10-21
      • 2021-11-14
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多