eventfd_read()什么时候阻止?

时间:2015-09-21 07:56:57

标签: c linux glibc

我想知道eventfd_read()会阻止什么情况?

我阅读了联机帮助页,但没有提到任何内容。

我通过eventfd(0,0)创建了文件描述符。

提前致谢。

1 个答案:

答案 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;
}