在追加模式下多次打开

fopen multiple times in append mode

我有多个线程试图记录到同一个文件。

每个线程都有一个指向文件的FILE *FILE * 以追加 ('a') 模式打开,并且正在使用行缓冲。

在同一个进程中打开多个 FILE * 到同一个文件是根据 ANSI C 定义的实现。

有没有人知道 MacOS、FreeBSD 和 Linux 的特定实现行为,特别是每个 FILE * 是否有自己的行缓冲区,以及是否有丢失或交错写入的机会.

MacOS、FreeBSD 和 Linux 都是 POSIX 系统。因此,每个 FILE* 将有自己的 user-space 缓冲区(或 none 如果您禁用它),一旦该缓冲区被刷新,它将被写入底层文件描述符。 POSIX 保证追加打开的文件描述符写入是原子的,因此不会丢失任何数据。只要您的数据没有被拆分到多个刷新中,它们就不会相互交错。