【发布时间】:2021-11-12 13:56:42
【问题描述】:
我有多个线程试图登录到同一个文件。
每个线程都有一个指向文件的FILE *。 FILE *s 以附加 ('a') 模式打开并使用行缓冲。
在同一个进程中打开多个FILE *到同一个文件是根据ANSI C定义的实现。
有没有人知道 MacOS、FreeBSD 和 Linux 的具体实现行为,特别是每个 FILE * 是否有自己的行缓冲区,以及是否有丢失或交错写入的机会。
【问题讨论】:
-
OT:拥有一个处理写入日志文件的函数(使用正确的互斥锁)会简单得多。像这样从多个线程写入同一个文件的竞争条件迟早会导致问题
-
@UnholySheep 在一般情况下不正确。 Posix 保证原子写入文件。