簡體   English   中英

在EAGAIN之后是否強制阻止讀取?

[英]Force blocking read after EAGAIN?

我有一個開放的文件描述符,可以不阻塞地讀取。 我需要做的就是簡單地讀取所有數據,直到到達EOF,然后將該數據寫入可寫文件描述符中。 由於執行此復制的過程並不“了解”周圍發生的任何事情,因此我不認為我可以在等待數據時做一些有用的事情,並且我不想使用while循環(while errno不是EAGAIN ),因為我認為這很浪費。 有沒有辦法阻止或暫停復制過程的執行,直到數據可用為止?

您的其他答案只是取消設置O_NONBLOCK ,這會將文件設置回阻止狀態。 如果您的情況合適,那很好。 但是,如果沒有,則可以使用select()進行阻塞,直到您的非阻塞文件描述符可讀為止。

Linux SCSI Generic(sg)HOWTO的第7章給出如何執行此操作的示例

int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM