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 безлимит

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

PUTMSG(2)

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

СИНТАКСИС


        #include <stropts.h>

        

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

Бесплатный конструктор сайтов и 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...