Manpages

НАЗВАНИЕ

poll − ожидание разнообразных событий на файловом дескрипторе

КРАТКАЯ СВОДКА

#include <sys/poll.h>

int poll(struct pollfd *ufds, unsigned int nfds, int timeout);

ОПИСАНИЕ

poll является вариацией на тему select. Здесь задается массив из nfds структур типа
struct pollfd {
int fd; /* файловый дескриптор */
short events; /* запрошенные события */
short revents; /* возвращенные события */
};
и timeout в миллисекундах. Отрицательное значение означает бесконечный тайм-аут. Поле fd содержит файловый дескриптор открытого файла. Поле events-- входной параметр, указывающий битовую маску событий, интересующих приложение. Поле revents-- выходной параметр, куда ядро помещает информацию о произошедших событиях: запрошенных или событий типа POLLERR, POLLHUP или POLLNVAL. (Эти три битовых флага не имеют смысла при использовании в поле events и будут установлены в поле revents, если соответствующее условие истинно.) Если ни одно из запрошенных событий (или ошибок) не случилось, то ядро ждет их появления до тайм-аута. Вот возможные биты, описанные в <sys/poll.h>:
#define POLLIN 0x0001 /* Можно читать данные */
#define POLLPRI 0x0002 /* Есть срочные данные */
#define POLLOUT 0x0004 /* Запись не будет блокирована */
#define POLLERR 0x0008 /* Произошла ошибка */
#define POLLHUP 0x0010 /* "Положили трубку" */
#define POLLNVAL 0x0020 /* Неверный запрос: fd не открыт */
В <asm/poll.h> также определены значения POLLRDNORM, POLLRDBAND, POLLWRNORM, POLLWRBAND и POLLMSG.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном завершении возвращается положительное значение, равное количеству структур с ненулевыми полями revents (другими словами, дескрипторы с обнаруженными событиями или ошибками). Нуль означает, что системный вызов вышел по тайм-ауту, и ни один из файловых дескрипторов не был выбран. При ошибке возвращается −1, а errno устанавливается в соответствующее значение.

ОШИБКИ

ENOMEM

Не хватило памяти для создания таблицы файловых дескрипторов.

EFAULT

Массив, переданный в качестве аргумента, не находится в адресном пространстве вызывающей программы.

EINTR

До появления запрошенного события произошел сигнал.

СООТВЕТСТВИЕ СТАНДАРТАМ

XPG4-UNIX.

ДОСТУПНОСТЬ

Системный вызов poll() появился в Linux 2.1.23. Библиотечный вызов poll() появился в libc 5.4.28 (использует эмуляцию с помощью select(2), если в вашем ядре нет системного вызова poll(2).

СМОТРИ ТАКЖЕ

select(2)

ПЕРЕВОД

Copyright (C) Alexey Mahotkin <alexm [AT] hsys.ru> 2000