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

Златоуст.Ru

 

 

PUTMSG(2)                                             PUTMSG(2)

НАЗВАНИЕ 
        putmsg - посылка  сообщения  в поток, ассоциированный с
        псевдоустройством

СИНТАКСИС 
        #include 
        
        int putmsg (fd, ctlptr, dataptr, flags)
        int fd;
        struct strbuf *ctlptr;
        struct strbuf *dataptr;
        int flags;

ОПИСАНИЕ 
        Системный вызов putmsg создает сообщение [см. intro(2)]
        по  содержимому буферов, указанных пользователем, и по-
        сылает сообщение в поток. Сообщение может  состоять  из
        двух  частей: области данных и управляющей области, ко-
        торые берутся из разных буферов (см.  ниже).  Семантика
        каждой части определяется модулем потока, который полу-
        чает это сообщение.

        Аргумент  fd задает дескриптор файла, ассоциированный с
        открытым потоком.

        Аргументы ctlptr и dataptr - это указатели на структуру
        типа strbuf, содержащую следующие элементы:

             int maxlen; /* Максимальная длина буфера */
             int len;    /* Длина извлеченной информации */
             char *buf;  /* Указатель на буфер */

        Аргумент ctlptr указывает на структуру, описывающую уп-
        равляющую область сообщения, если таковая имеется. Ком-
        понент  buf  указывает  на буфер, в котором размещается
        управляющая информация, а len задает  количество  байт,
        которое  должно  быть  послано. Поле maxlen в системном
        вызове putmsg не используется [см. getmsg(2)]. Таким же
        образом dataptr задает  область  данных,  если  таковая
        имеется, которые должны быть включены в сообщение.

        Аргумент  flags  может  принимать  два  значения: 0 или
        RS_HIPRI (см. ниже).

        Чтобы послать данные в сообщении, аргумент dataptr дол-
        жен быть отличен от NULL,  а  значение  компонента  len
        должно  быть неотрицательным. Чтобы послать управляющую
        информацию, соответствующие значения должны быть  уста-
        новлены  для  ctlptr.  Область  данных (управляющая об-
        ласть) не будет послана, если аргумент dataptr (ctlptr)
        равен NULL, или значение  компонента  len  для  dataptr
        (ctlptr) равно -1.

        Если  задана управляющая область и значение переменной,
        на которую указывает аргумент  flags,  равно  RS_HIPRI,
        посылается приоритетное сообщение. Если значение по ад-
        ресу  flags  равно 0, посылается неприоритетное сообще-
        ние. Если не указана управляющая область и значение  по
        адресу flags равно RS_HIPRI, системный вызов putmsg за-
        вершается  неудачей, а переменная errno получает значе-
        ние EINVAL. Если не указана ни управляющая  область  ни
        область  данных и значение по адресу flags равно 0, со-
        общение не посылается и возвращается нулевой результат.

        В случае посылки неприоритетных сообщений процесс, выз-
        вавший putmsg, откладывается, если  очередь  потока  на
        запись  полна вследствие внутренних условий прохождения
        сообщений. Для приоритетных сообщений  откладывания  по
        этой  причине не происходит. Для неприоритетных сообще-
        ний откладывания также не происходит, если очередь  по-
        тока на запись полна, но установлен флаг O_NDELAY; сис-
        темный  вызов  завершается  неудачей,  присваивая errno
        значение EAGAIN.

        Кроме того процесс,  вызвавший  putmsg,  откладывается,
        ожидая  доступности достаточного числа блоков для сооб-
        щений в потоке (независимо от  приоритетности  и  флага
        O_NDELAY), если при этом вызов не будет отвергнут из-за
        недостатка  системных  ресурсов. Сообщения по частям не
        посылаются.

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

        [EAGAIN]    Указано неприоритетное сообщение,  установ-
                    лен  флаг O_NDELAY, а очередь потока на за-
                    пись заполнена вследствие внутренних  усло-
                    вий прохождения сообщений.

        [EAGAIN]    Не  удалось выделить буфера для посылаемого
                    сообщения.

        [EBADF]     Аргумент fd не является корректным дескрип-
                    тором файла, открытого на запись.

        [EFAULT]    Аргумент  ctlptr, dataptr, или flags указы-
                    вает за пределы отведенного процессу адрес-
                    ного пространства.

        [EINTR]     Во время выполнения системного  вызова  пе-
                    рехвачен сигнал.

        [EINVAL]    Аргумент flags имеет некорректное значение,
                    или задано значение RS_HIPRI, а управляющая
                    область не указана.

        [EINVAL]    Поток, на который ссылается fd, мультиплек-
                    сируется.

        [ENOSTR]    С дескриптором fd не ассоциирован поток.

        [ENXIO]     Ниже по потоку произошло  освобождение  ли-
                    нии.

        [ERANGE]    Размер области данных сообщения не попадает
                    в интервал между минимальной и максимальной
                    длинами пакета, заданными самым верхним мо-
                    дулем потока. Это значение также  возвраща-
                    ется,  если управляющая область или область
                    данных  имеют  длины,  превосходящие  соот-
                    ветствующие максимумы, заданные при генера-
                    ции системы.

        Кроме того, системный вызов putmsg  завершается  неуда-
        чей, если, до обращения к putmsg, в истоке потока полу-
        чено  сообщение об ошибке псевдоустройства. В этом слу-
        чае переменной errno присваивается значение, содержаще-
        еся в сообщении.

СМ. ТАКЖЕ 
        intro(2), read(2), getmsg(2), poll(2), write(2).

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



 

 

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

Мое резюме

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

Ресурсы сети

Фотоальбом

 

 

 

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