проверка возвращается в 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))
что означает «если есть данные для чтения, бит не установлен», т.е. «если нет данных для чтения».