可以使用fopen将多个进程追加到文件中,而没有任何并发问题吗?
我有一个在追加模式下打开文件的过程。在这种情况下,它是一个日志文件。样例代码:
int main(int argc, char **argv) { FILE *f;
f = fopen("log.txt", "a");
fprintf(f, "log entry line");
fclose(f);
}
两个问题:
- 如果我有多个附加到同一文件的进程,那么每个日志行会以不同的方式显示吗,或者在进程上下文切换时是否可以将它们交错?
- 如果许多进程需要访问文件,从而导致并发问题,此写操作会阻塞吗?
我正在考虑以最简单的方式来执行此操作,或者考虑使用zeromq通过管道将日志条目泵送到日志收集器。
我确实考虑过syslog,但是我真的不希望该软件有任何平台依赖性。
此btw的默认平台是Linux。
回答:
您肯定会具有平台依赖性,因为Windows无法处理附加到同一文件的多个进程。
关于同步问题,我认为行缓冲输出/应该/可以在大多数时间内为您节省时间,也就是说,根据我的基于shell的简短测试,应该完整保留99.99%以上的短日志行,但并非每次都可以。显式语义绝对是可取的,并且由于无论如何您将无法独立编写此hack系统,因此我建议使用syslog方法。
以上是 可以使用fopen将多个进程追加到文件中,而没有任何并发问题吗? 的全部内容, 来源链接: utcz.com/qa/409471.html