我有一个名为“data.txt”的文件,总是有50个字节的数据。
我有两个主题。
第一个线程,从字节0到字节50读取内容:
while(1){
char buf[50];
FILE* fp = fopen("data.txt","r");
fread(buf,1,50,fp);
/* process data */
fclose(fp);
}
第二个线程,将数据附加到文件中(=始终在前50个字节之后):
while(1){
FILE* fp = fopen("data.txt","a");
fwrite("hello\n",1,6,fp);
fclose(fp);
}
此解决方案是否是线程安全且可移植的? (没有分段错误,没有数据不一致,......)
答案 0 :(得分:1)
正如我在你的另一篇相关文章中所写,据我所知,它不应该崩溃。无论是写入,还是读取和读取,我都不知道。
如果您使用的是POSIX系统:您是否考虑过使用fifo(参见http://man7.org/linux/man-pages/man7/fifo.7.html)?我的印象是文件系统只是您的底层通信需求的帮助,即实际文件并不重要。
答案 1 :(得分:0)
只有一个位置指示器与文件流相关联,问题是如果以追加模式打开文件,位置指示器会在每次写入之前转到文件末尾。您可以使用fseek()
重新定位位置指示器以进行读取,但只要您写入文件,位置指示器就会返回到文件末尾。
修改强>
没关系,因为每个线程中的每个文件描述符将彼此独立。