mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

POLL(2)                                                 POLL(2)

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

СИНТАКСИС 
        #include 
        #include 

        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
        присваивается код ошибки.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк