НАЗВАНИЕ¶
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@hsys.msk.ru> 2000