Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

POLL(2)

НАЗВАНИЕ
poll - мультиплексирование псевдоустройств по вводу/выводу

СИНТАКСИС


        #include <stropts.h>

        #include <poll.h>



        int poll (fds, nfds, timeout)

        struct pollfd fds [ ];

        unsigned long nfds;

        int timeout;

ОПИСАНИЕ
Системный вызов poll предоставляет пользователю механизм одновременного управления вводом/выводом (мультиплексирования) для набора дескрипторов открытых потоков [см. intro(2)]. Poll идентифицирует потоки, с которыми пользователь может обменяться сообщениями, а также потоки, в которых произошли определенные события. Сообщения можно принимать с помощью системных вызовов read(2) или getmsg(2), а посылать посредством write(2) или putmsg(2). Некоторые команды из группы ioctl(2), такие как I_RECVFD и I_SENDFD [см. streamio(7)], также могут быть использованы для приема и посылки сообщений.

Аргумент fds задает дескрипторы файлов, которые должны анализироваться, и интересующие пользователя события для каждого из дескрипторов. Fds есть указатель на массив из стольких элементов, сколько дескрипторов файлов интересует пользователя. Элементами массива являются структуры типа pollfd, содержащие следующие элементы:


     int fd; /* Дескриптор файла */

     short events;   /* Интересующие события */

     short revents;  /* Происшедшие события */

Компонент fd задает дескриптор открытого файла, а events и revents являются масками, построенными с помощью побитной операции ИЛИ из следующих флагов:

POLLIN
В очереди чтения истока есть неприоритетное сообщение или сообщение, передающее дескриптор файла (см. I_RECVFD). Этот флаг устанавливается и в том случае, если сообщение имеет нулевую длину. В компоненте revents этот флаг не может присутствовать одновременно с флагом POLLPRI.
POLLPRI
В очереди чтения истока есть приоритетное сообщение. Этот флаг устанавливается и в том случае, если сообщение имеет нулевую длину. В компоненте revents этот флаг не может присутствовать одновременно с флагом POLLIN.
POLLOUT
Верхняя очередь записи потока неполна
[см. intro(2)]. Приоритетные управляющие сообщения могут быть посланы в любое время (см. putmsg(2)).
POLLERR
В исток потока поступило сообщение об ошибке. Флаг допустим только в revents; в events он не используется.
POLLHUP
В потоке произошло освобождение линии. Этот флаг не может присутствовать одновременно с флагом POLLOUT: поток не может быть доступным на запись, если произошло освобождение линии. Этот флаг, однако, может присутствовать одновременно с флагами POLLIN и POLLPRI. Флаг POLLHUP допустим только в revents; в events он не используется.
POLLNVAL
Дескриптор fd не соответствует открытому потоку. Флаг допустим только в revents; в events он не используется.

Для каждого элемента массива, на который указывает аргумент fds, poll проверяет дескриптор файла fd на наличие событий, указанных в events. Количество дескрипторов файлов задается аргументом nfds. Если nfds превосходит NOFILES - системное ограничение на количество одновременно открытых файлов [см. intro(2)] - 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.

СМ. ТАКЖЕ
intro(2), read(2), getmsg(2), putmsg(2), write(2). streamio(7) в Справочнике администратора.

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

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...