什么时候会eventfd_read()阻止?

我不知道在什么情况下eventfd_read()会阻止?

我读了manpage,但没有提到任何东西。

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

提前致谢。

eventfd(2)手册页进行read()调用:

如果在调用读(2)时eventfd计数器为零,则调用要么阻塞,直到计数器变为非零(此时读(2)如上所述)或者如果EAGAIN文件描述符已经被制成非阻塞的。

对于eventfd_read()eventfd_write()函数:

这些函数对eventfd文件描述符执行读写操作,如果正确的字节数被传输,则返回0,否则返回-1。

因此, eventfd_read()只是read()read()块的包装,即当eventfd计数器为零且描述符未使用O_NONBLOCK (使用fcntl(2)EFD_NONBLOCK )时。

你可以在glibc源文件中验证这个:

 INT
 eventfd_read(int fd,eventfd_t * value)
 {
   return __read(fd,value,sizeof(eventfd_t))!= sizeof(eventfd_t)?  -1:0;
 }