C 将revents签入结构pollfd
根据man(2)民意测验: 如果我在使用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
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))