проверка возвращается в struct pollfd

Согласно опросу man(2):

      int poll(struct pollfd *fds, nfds_t nfds, int timeout);
struct pollfd {
    int   fd;         /* file descriptor */
    short events;     /* requested events */
    short revents;    /* returned events */
};

Если я напишу if(! (fds.revents &1 )) после использования poll Что это значит?

1 ответ

Решение

Согласно опросу man(2) действительно ...

Поле revents - это выходной параметр, заполненный ядром событиями, которые действительно произошли. Биты, возвращаемые в revents, могут включать любой из битов, указанных в событиях, или одно из значений POLLERR, POLLHUP или POLLNVAL. (Эти три бита не имеют смысла в поле событий и будут установлены в поле revents всякий раз, когда соответствующее условие истинно.)

определяет их как

      #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))

что означает «если есть данные для чтения, бит не установлен», т.е. «если нет данных для чтения».

Другие вопросы по тегам