我有一個文件描述符是打開的,可能是非阻塞的讀取。我需要做的只是讀取所有數據,直到達到EOF並將該數據寫入可寫文件描述符。由於執行此複製的過程並不「意識到」周圍發生的任何事情,所以我不認爲我可以在等待數據時做一些有用的事情,並且我不想使用循環(while errno
不是EAGAIN
),因爲我認爲這將是浪費。在數據可用之前,是否有辦法阻止或以其他方式暫停執行復制過程?EAGAIN後強制阻止讀取?
0
A
回答
3
你對方的回答乾脆取消設置O_NONBLOCK
,設定文件回堵。這很好,如果這在你的情況下有效;但如果沒有,您可以使用select()
來阻止,直到您的非阻塞文件描述符可讀。
2
了Linux SCSI通用(sg)HOWTO的第7章給出瞭如何做到這一點an example:
int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
相關問題
- 1. asynctask讀取阻止
- 2. 非阻塞TCP套接字在讀取時持續接收EAGAIN()
- 3. 阻止讀取std :: ifstream
- 4. Mac OS阻止讀取(POSIX)
- 5. DataInputStream讀取不阻止
- 6. 中斷阻止evdev讀取
- 7. PHP - 阻止文件讀取
- 8. 阻止初始化並強制initWithOption
- 9. 中斷阻止讀
- 10. 使流讀()阻止
- 11. 如何防止讀取時阻塞TcpStream?
- 12. 如何阻止讀取系統調用
- 13. 如何阻止gdb讀取「.cshrc」?
- 14. 在linux上中止阻塞讀取
- 15. 在php中阻止文件讀取?
- 16. 從java.net.Socket讀取InputStream有時會阻止
- 17. 線程objectoutputstream objectinputstream阻止不讀取
- 18. 阻止讀取管道的調用
- 19. urllib2 urlopen讀取超時/阻止
- 20. sql server 2008讀取阻止寫入
- 21. Tcp套接字讀取總是阻止
- 22. 緩衝讀取器不阻止
- 23. 讀取xml文件後阻止文件通道關閉
- 24. 阻塞套接字返回EAGAIN
- 25. EAGAIN錯誤接受阻塞套接字
- 26. 讀取串行端口:如何中斷讀取阻止操作
- 27. select() - 在管道上阻塞後讀取
- 28. 強制停止後啓動服務
- 29. BOOT_COMPLETED後強制停止服務
- 30. 在讀取00字節後停止讀取/讀取字節