按照我的理解-我们可以使用fctnl将文件描述符标记为非阻塞的,所以每当我们调用该文件描述符上的任何阻塞操作时,它都会错误地修改errno,以指示文件描述符尚未准备好。我们有责任经常轮询文件描述符,并随时读取或写入文件。
使用select,我们传入文件描述符的三个数组(读、写和除),然后select在给定的时间间隔内轮询文件描述符,修改数组以指示哪些文件描述符可用于指定的操作。而select本身就是一个阻塞操作。
现在我的怀疑是:
select,并在没有检测到任何事件的情况下超时。现在,如果我对一个文件描述符调用read,它会阻塞还是返回E_WOULDBLOCK / E_AGAIN,即使我没有首先使用fcntl?发布于 2017-11-07 06:39:34
select()超时,但是要读取一个尚未准备好的阻塞文件描述符,那么您将阻塞。对select()的调用根本不影响文件描述符的行为。select()调用将立即返回。如果数据在1秒后准备就绪,select()调用将在1秒后返回。如果在这段时间内没有数据准备好(或者数据是在超时发生之前一点点到达的话),它只会在10秒后返回。https://stackoverflow.com/questions/47151098
复制相似问题