解决方法
如果两个线程都使用fopen()打开同一个文件,则它们将各自具有独立文件流(FILE *),这些文件流由引用同一文件的独立文件描述符支持.您可以独立写入两个文件流,但文件的最终结果将取决于线程写入的位置以及何时刷新文件流.除非您控制每个线程的写入位置,否则结果是不可预测的.最简单的方法是确保两个线程使用相同的文件流,但您可能仍需要在线程之间进行协调.请注意,POSIX要求C函数提供对文件流的协调访问 – 请参阅
flockfile()
,其中强制要求
All functions that reference
(FILE *)
objects,except those with names ending in_unlocked
,shall behave as if they useflockfile()
andfunlockfile()
internally to obtain ownership of these (FILE *) objects.