poll

Autres langues

Langue: ru

Autres versions - même langue

Version: 7 декабря 1997 (fedora - 25/11/07)

Section: 2 (Appels système)

НАЗВАНИЕ

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