C eventfd_read()将在何时阻塞?

C eventfd_read()将在何时阻塞?,c,linux,glibc,C,Linux,Glibc,我想知道在什么情况下eventfd\u read()会被阻止 我读了手册,但没有提到任何东西 我通过eventfd(0,0)创建了文件描述符 提前感谢。来自read()手册页的呼叫: 如果调用时eventfd计数器为零 读取(2),则调用会阻塞,直到计数器 变为非零(此时,读取(2)按如下方式进行 如果文件 描述符已被设置为非阻塞 对于eventfd_read()和eventfd_write()函数: 这些函数对eventfd执行读写操作 文件描述符,如果指定了正确的字节数,则返回0 已转移,或

我想知道在什么情况下
eventfd\u read()
会被阻止

我读了手册,但没有提到任何东西

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

提前感谢。

来自
read()手册页的
呼叫:

如果调用时eventfd计数器为零 读取(2),则调用会阻塞,直到计数器 变为非零(此时,读取(2)按如下方式进行 如果文件 描述符已被设置为非阻塞

对于
eventfd_read()
eventfd_write()
函数:

这些函数对eventfd执行读写操作 文件描述符,如果指定了正确的字节数,则返回0 已转移,或-1

因此,
eventfd\u read()
只是
read()
read()
块的包装,即当
eventfd
计数器为零且未为描述符设置
O\u NONBLOCK
时(使用或
EFD\u NONBLOCK

您可以通过以下方式进行验证:

int eventfd_read(int fd,eventfd_t*值) { 返回uu read(fd,value,sizeof(eventfd_t))!=sizeof(eventfd_t)?-1:0; } int eventfd_read (int fd, eventfd_t *value) { return __read (fd, value, sizeof (eventfd_t)) != sizeof (eventfd_t) ? -1 : 0; }