我想知道eventfd_read()
会阻止什么情况?
我阅读了联机帮助页,但没有提到任何内容。
我通过eventfd(0,0)
创建了文件描述符。
提前致谢。
答案 0 :(得分:3)
来自read()
电话的eventfd(2)
手册页:
如果eventfd计数器在调用时为零 读(2),然后调用阻塞直到计数器 变为非零(此时,read(2)继续为 如上所述)或失败,如果文件错误EAGAIN 描述符已被取消阻塞。
对于eventfd_read()
和eventfd_write()
函数:
这些函数对eventfd执行读写操作 文件描述符,如果正确的字节数,则返回0 转移,否则为-1。
所以eventfd_read()
只是read()
的包装器,当read()
阻塞时阻塞,即当eventfd
计数器为零且未为描述符设置O_NONBLOCK
时(使用fcntl(2)
或EFD_NONBLOCK
)。
您可以在glibc sources中验证这一点:
int eventfd_read (int fd, eventfd_t *value) { return __read (fd, value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0; }