我有一個新的文件,打開爲讀/寫,然後1個線程將從網絡接收並追加二進制數據到該文件,另一個線程將從同一文件讀取來處理二進制數據,但read()總是返回0,所以我不能讀取數據,但是如果我在命令行中使用cat來追加數據,那麼程序可以讀取數據和進程。我不知道爲什麼它不能注意到來自網絡的新數據。我在這個程序中使用open(),read()和write()。C prog:追加文件後,仍然返回0
1
A
回答
2
使用管道而不是HDD文件。根據你的系統(你沒有告訴我們),你的代碼只有很小的修改(你沒有給我們)來做到這一點。
+0
'open'和'read'通常是Unix命令,但這不是別的不可能。 – 2011-03-07 09:19:08
0
文件操作被緩衝。嘗試沖洗流?
0
假設您的read()
和write()
函數是POSIX函數,它們共享文件位置,即使它們用於不同的線程。所以你的read
write
後read
write
寫的位置後。不要使用文件IO在線程之間進行通信。在大多數情況下,我甚至不會使用管道或套接字(我使用它的一個上下文是當讀線程使用poll/select
和其他文件描述符時),而是使用簡單的共享內存和互斥鎖。
相關問題
- 1. parentNode.removeChild然後追加回
- 2. $ facebook-> getUser();仍然返回0
- 3. $ facebook-> getUser();仍然返回0
- 4. QDir的absolutePath仍然返回文件名
- 5. git仍然未追蹤追加
- 6. python文件寫入然後追加
- 7. 寫入文本文件,文本追加到該文件,然後加載(讀回)
- 8. 功能仍然運行後返回
- 9. 追加後動態div元素高度返回0
- 10. 獲取JQuery .height()追加到另一個div後返回0
- 11. Swift:flatmap仍然返回可選
- 12. window.open()仍然返回null
- 13. Isnull仍然返回空值
- 14. os.path.getsize返回0雖然文件夾中有文件(Python 3.5)
- 15. 即使在NetworkStream.EndRead返回0字節後,爲什麼仍然會接收數據?
- 16. numberOfRowsInSection返回大於0; cellForRowAtIndexPath仍然沒有被調用
- 17. 即使CSV源不爲空,我的腳本仍然返回0
- 18. Sendto()仍然返回我0字節發送
- 19. Gridview在瀏覽時仍然顯示,然後返回
- 20. jquery在追加後返回舊值
- 21. 將頭添加到不存在的文件然後追加
- 22. C#MVC 4追加返回的視圖
- 23. C#轉換文件到Base64String,然後再返回
- 24. 在javascript中返回false後仍然回發錯誤
- 25. 寫入文件後,爲什麼os.path.getsize仍然返回以前的大小?
- 26. 在啓動時清除文件的內容,然後追加
- 27. file.delete()返回true,但文件仍然存在
- 28. cvs,」文件應該被刪除,並仍然存在(或返回)「
- 29. 創建空白XML文件,然後追加到它
- 30. heroku應用程序仍然在推後推回舊文件
我使用兩個單獨的文件句柄,一個用於讀取,另一個用於寫入兩個線程,它可以工作。謝謝! – user478332 2011-03-08 08:20:30