НАЗВАНИЕ
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).
СМОТРИ ТАКЖЕ
ПЕРЕВОД
Copyright (C) Alexey Mahotkin <alexm [AT] hsys.ru> 2000