小编典典

可以使用fopen将多个进程追加到文件中,而没有任何并发​​问题吗?

linux

我有一个在追加模式下打开文件的过程。在这种情况下,它是一个日志文件。样例代码:

int main(int argc, char **argv) {
    FILE *f;
    f = fopen("log.txt", "a");
    fprintf(f, "log entry line");
    fclose(f);
}

两个问题:

  1. 如果我有多个附加到同一文件的进程,那么每个日志行会以不同的方式显示吗,或者在进程上下文切换时是否可以将它们交错?
  2. 如果许多进程需要访问文件,从而导致并发问题,此写操作会阻塞吗?

我正在考虑以最简单的方式来执行此操作,或者考虑使用zeromq通过管道将日志条目泵送到日志收集器。

我确实考虑过syslog,但是我真的不希望该软件有任何平台依赖性。

此btw的默认平台是Linux。


阅读 465

收藏
2020-06-07

共1个答案

小编典典

您肯定会具有平台依赖性,因为Windows无法处理附加到同一文件的多个进程。

关于同步问题,我认为行缓冲输出/应该/可以在大多数时间内为您节省时间,也就是说,根据我的基于shell的简短测试,应该完整保留99.99%以上的短日志行,但并非每次都可以。显式语义绝对是可取的,并且由于无论如何您将无法独立编写此hack系统,因此我建议使用syslog方法。

2020-06-07