C 将revents签入结构pollfd

C 将revents签入结构pollfd,c,linux,system-calls,polling,poll-syscall,C,Linux,System Calls,Polling,Poll Syscall,根据man(2)民意测验: 如果我在使用poll之后写If(!(fds.revents&1))这是什么意思?根据 字段revents是一个输出参数,由内核填充 与实际发生的事件有关。比特返回 复仇者可以包括事件中指定的任何事件,或者 值POLLERR、POLLHUP或POLLNVAL。(这三位是 在事件场中毫无意义,并将在复仇者中设定 当相应条件为真时,输入字段。) poll.h将其定义为 #define POLLIN 0x001 /* There is data to r

根据man(2)民意测验:

如果我在使用
poll之后写
If(!(fds.revents&1))
这是什么意思?

根据

字段revents是一个输出参数,由内核填充 与实际发生的事件有关。比特返回 复仇者可以包括事件中指定的任何事件,或者 值POLLERR、POLLHUP或POLLNVAL。(这三位是 在事件场中毫无意义,并将在复仇者中设定 当相应条件为真时,输入字段。)

poll.h
将其定义为

#define POLLIN      0x001       /* There is data to read.  */
#define POLLPRI     0x002       /* There is urgent data to read.  */
#define POLLOUT     0x004       /* Writing now will not block.  */
// etc...
有了这些知识

if(!(fds.revents & 1))

if(!(fds.revents & POLLIN))

这意味着“如果有数据要读取”位未设置,即“如果没有数据要读取”。

您不知道为什么要这样写吗?你是从其他地方得到这个表达式的,还是这里发生了什么?@AKX我在另一个网站上看到了这个代码,我想知道它是什么意思。也许你至少应该链接到另一个网站,这样我们就有了更多关于那里发生的事情的上下文。首先,它意味着代码写得很糟糕。应该使用
poll.h
中的符号常量,而不是像
1
这样的神奇值。如果与该位对应的事件根本没有被请求,或者被请求但在
轮询期间没有发生,则该条件为真。
if(!(fds.revents & POLLIN))