我不知道在什么情况下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; }