繁体   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