是在线程安全的不同字节范围读取和写入同一文件?

我有一个名为“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); } 

这个解决方案是线程安全且可移植的吗? (没有分段错误,没有数据不一致,……)

正如我在你的另一篇相关文章中所写,据我所知,它不应该崩溃。 无论是写入,还是读取和读取,我都不知道。

如果您使用的是POSIX系统:您是否考虑过使用fifo(参见http://man7.org/linux/man-pages/man7/fifo.7.html )? 我的印象是文件系统只是您的底层通信需求的帮助,即实际文件并不重要。

只有一个位置指示器与文件流相关联,问题是如果您以追加模式打开文件,位置指示器会在每次写入之前转到文件末尾。 您可以使用fseek()重新定位位置指示器以进行读取,但只要您写入文件,位置指示器就会返回到文件末尾。

编辑:
没关系,因为每个线程中的每个文件描述符都是相互独立的。