我有一个新文件,以读/写方式打开,然后1个线程将从网络接收并将二进制数据附加到该文件,另一个线程将从同一个文件中读取以处理二进制数据,但是read()总是返回0,所以我无法读取数据,但如果我在命令行中使用cat来追加数据,那么程序就可以读取数据和进程。我不知道为什么它不能注意到来自网络的新数据。我在这个程序中使用open(),read()和write()。
答案 0 :(得分:2)
使用管道而不是HDD文件。根据您的系统(您没有告诉我们),您的代码(您没有提供给我们)只进行了少量修改。
答案 1 :(得分:0)
文件操作被缓冲。试着冲洗溪流?
答案 2 :(得分:0)
假设您的read()
和write()
函数是POSIX函数,它们共享文件位置,即使它们在不同的线程中使用。因此read
之后的write
在read
撰写的位置之后尝试write
。不要使用文件IO在线程之间进行通信。在大多数情况下,我甚至不使用管道或套接字(我使用它们的一个上下文是当读取线程使用poll/select
和其他文件描述符时),而是简单的共享内存和互斥。