我有一个可以读取的文件描述符,该文件可能是非阻滞的。我需要做的就是简单地阅读所有数据,直到到达EOF并将该数据写入可写的文件描述符。由于执行此复制的过程并没有“意识到”周围发生的任何事情,因此我认为我在等待数据时可以做一些有用的事情,而且我不想使用 while 循环(而 errno 不是 EAGAIN),因为我认为这会很浪费。是否有一种方法可以阻止或以其他方式暂停执行复制过程,直到数据可用?

有帮助吗?

解决方案

您的另一个答案简单地说明 O_NONBLOCK, ,将文件设置回阻塞。如果您的情况有效,那就很好。但是如果没有,您可以使用 select() 阻止直到您的非阻滞文件描述符可读。

其他提示

Linux SCSI通用(SG)Howto的第7章 一个例子 如何做到这一点:

int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top