线程1(T1)使用
创建文件FILE *MyFile = tmpfile();
然后线程2(T2)开始写入文件。当线程2正在写入时,线程1偶尔会从文件中读取。
我将其设置为当T1正在读取时T2暂时暂停,但由于T1只读取部分文件,T2不会写入(文件按顺序写入),I'我想知道是否有必要暂停T2。我知道如果FILE被固定大小的数组/向量替换,那就没问题。只是想知道光盘与内存有何不同。
编辑。
使用fseek和fwrite完成写入。读取是使用fseek和fread完成的。我认为这是一个给定但可能不是来自一些评论。我想如果T1确定在T2 fseeks定位X的同时定位Y,那么谁知道下一个读或写将从哪里开始。请看管道,谢谢你的帮助。
答案 0 :(得分:3)
在处理单个线程时,在FILE上混合读取和写入甚至都不安全。从fopen的手册页:
读取和写入可以以任何顺序混合在读/写流上。注意ANSI C 要求输出和输入之间的文件定位功能介入,除非输入 操作遇到文件结束。 (如果不满足此条件,则允许读取 返回最近的写入结果。)因此这是一个好习惯(和 确实有时需要在Linux下)在fseek(3)或fgetpos(3)之间进行操作 在这样的流上写和读操作。这个操作可能是一个明显的无操作(如 fseek(...,0L,SEEK_CUR)调用其同步副作用)。
因此,不要假设读取和写入与您神奇地同步,并保护使用互斥锁访问FILE。