我有一个可以读取的文件描述符,它可能是非阻塞的。我需要做的是简单地读取所有数据,直到到达 EOF 并将该数据写入可写文件描述符。由于执行此复制的过程不“知道”周围发生的任何事情,我不认为我可以在等待数据时做一些有用的事情,而且我不想使用while
循环(whileerrno
是不是EAGAIN
),因为我认为这会很浪费。有没有办法阻止或以其他方式暂停复制过程的执行,直到数据可用?
问问题
563 次
2 回答
4
您的其他答案只是 unsets O_NONBLOCK
,它将文件设置回阻塞状态。如果这适用于您的情况,那很好;但如果没有,您可以使用select()
阻塞直到您的非阻塞文件描述符可读。
于 2010-05-23T12:19:12.650 回答
2
Linux SCSI Generic (sg) HOWTO 的第 7 章给出了如何执行此操作的示例:
int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
于 2010-05-22T14:39:56.133 回答