Unix Man (Справочное руководство)


POLL(2) - часть 2


Для каждого элемента массива, на который указывает аргумент fds, poll проверяет дескриптор файла fd на наличие событий, указанных в events. Количество дескрипторов файлов задается аргументом nfds. Если nfds превосходит NOFILES - системное ограничение на количество одновременно открытых файлов [см. ] - poll завершается неудачей.

Если значение fd меньше нуля, events игнорируется, а revents для этого элемента устанавливается равным 0.

Результаты работы системного вызова poll помещаются в поле revents структуры типа pollfd. Единичные биты в revents показывают, какие из событий, интересующих пользователя, произошли. Если ни одно из событий не произошло, poll возвращает в revents нулевые значения бит. Флаги POLLHUP, POLLERR и POLLNVAL устанавливаются в revents, если выполнены соответствующие условия; это происходит даже тогда, когда перечисленные флаги не установлены в поле events.

Если ни одно из ожидаемых событий ни для одного из указанных дескрипторов файлов не имеет места, poll будет ждать как минимум timeout миллисекунд того, чтобы по крайней мере одно событие хотя бы для одного дескриптора произошло. На компьютерах, где время не может быть измерено с точностью до миллисекунд, timeout округляется до ближайшего доступного системе значения. Если значение timeout равно 0, poll возвращает управление немедленно. Если значение timeout равно -1, poll ждет, пока не произойдет одно из событий, или системный вызов не будет прерван. Флаг O_NDELAY не влияет на poll.

Системный вызов poll завершается неудачей, если выполнено хотя бы одно из следующих условий:

[EAGAIN] Разместить внутренние структуры данных не удалось, но запрос следует повторить. [EFAULT] Какой-либо аргумент указывает за пределы отведенного процессу адресного пространства. [EINTR] Во время выполнения системного вызова перехвачен сигнал. [EINVAL] Аргумент nfds меньше 0 или больше NOFILES.

СМ. ТАКЖЕ


, , , , . в Справочнике администратора.

ДИАГНОСТИКА


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




Начало  Назад  Вперед