2011-03-07 33 views
1

我有一個新的文件,打開爲讀/寫,然後1個線程將從網絡接收並追加二進制數據到該文件,另一個線程將從同一文件讀取來處理二進制數據,但read()總是返回0,所以我不能讀取數據,但是如果我在命令行中使用cat來追加數據,那麼程序可以讀取數據和進程。我不知道爲什麼它不能注意到來自網絡的新數據。我在這個程序中使用open(),read()和write()。C prog:追加文件後,仍然返回0

+0

我使用兩個單獨的文件句柄,一個用於讀取,另一個用於寫入兩個線程,它可以工作。謝謝! – user478332 2011-03-08 08:20:30

回答

2

使用管道而不是HDD文件。根據你的系統(你沒有告訴我們),你的代碼只有很小的修改(你沒有給我們)來做到這一點。

+0

'open'和'read'通常是Unix命令,但這不是別的不可能。 – 2011-03-07 09:19:08

0

文件操作被緩衝。嘗試沖洗流?

0

假設您的read()write()函數是POSIX函數,它們共享文件位置,即使它們用於不同的線程。所以你的readwritereadwrite寫的位置後。不要使用文件IO在線程之間進行通信。在大多數情況下,我甚至不會使用管道或套接字(我使用它的一個上下文是當讀線程使用poll/select和其他文件描述符時),而是使用簡單的共享內存和互斥鎖。

相關問題