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


PUTMSG(2) - часть 2


В случае посылки неприоритетных сообщений процесс, вызвавший 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 присваивается значение, содержащееся в сообщении.

СМ. ТАКЖЕ


, , , , .

ДИАГНОСТИКА


При успешном завершении результат равен 0; в случае ошибки возвращается -1, а переменной errno присваивается код ошибки.




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



Книжный магазин