Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS/VDS серверы. 30 локаций на выбор

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

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

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

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

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

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

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

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

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

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

MSGOP(2)

НАЗВАНИЕ
msgop - операции над очередью сообщений

СИНТАКСИС


        #include <sys/types.h>

        #include <sys/ipc.h>

        #include <sys/msg.h>



        int msgsnd (msqid, msgp, msgsz, msgflg)

        int msqid;

        struct msgbuf *msgp;

        int msgsz, msgflg;



        int msgrcv (msqid, msgp, msgsz, msgtyp, msgflg)

        int msqid;

        struct msgbuf *msgp;

        long msgtyp;

        int msgsz, msgflg;

ОПИСАНИЕ
Посылка сообщения
Системный вызов msgsnd используется для того, чтобы поместить сообщение в очередь, ассоциированную с идентификатором очереди msqid. {Требуется право на запись.} Аргумент msgp является указателем на структуру, содержащую сообщение. Структура содержит следующие поля:


     long mtype;     /* Тип сообщения */

     char mtext [];  /* Текст сообщения */

Поле mtype содержит положительное целое число, которое может использоваться процессом-получателем для выбора сообщений (см. ниже описание системного вызова msgrcv). Поле mtext содержит текст длиной msgsz байт. Аргумент msgsz может принимать значения от 0 до установленного системой лимита.

Аргумент msgflg специфицирует действия, предпринимаемые, если выполнено хотя бы одно из следующих условий:

  1. Текущее количество байт в очереди уже равно значению поля msg_qbytes ассоциированной структуры данных [см. intro(2)].
  2. Общее количество сообщений во всех очередях системы равно максимально допустимому системой.
Действия, специфицируемые аргументом msgflg, следующие:
  1. Если выражение (msgflg & IPC_NOWAIT) истинно, то сообщение не посылается и вызывающему процессу сразу же возвращается управление.
  2. Если выражение (msgflg & IPC_NOWAIT) ложно, то выполнение вызывающего процесса задерживается до тех пор, пока не произойдет одно из следующих событий:
    • Условие, определяющее задержку процесса, перестает существовать; в этом случае посылается сообщение.
    • Идентификатор очереди сообщений msqid удаляется из системы [см. msgctl(2)]; в этом случае errno присваивается значение EIDRM и в качестве результата возвращается -1.
    • Вызывающий процесс получает сигнал, который должен быть обработан; в этом случае сообщение не посылается и вызывающий процесс продолжает выполнение так, как описано в signal(2).

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

[EINVAL]
Идентификатор очереди сообщений msqid не является корректным.
[EACCES]
У вызывающего процесса нет прав на выполнение операции [см. intro(2)].
[EINVAL]
Значение поля mtype меньше 1.
[EAGAIN]
Сообщение не может быть послано по какой либо из описанных выше причин, и выражение (msgflg & IPC_NOWAIT) истинно.
[EINVAL]
Значение аргумента msgsz меньше 0 или больше максимально допустимого в системе.
[EFAULT]
Аргумент msgp указывает за пределы отведенного процессу адресного пространства.

При успешном выполнении вызова над структурой данных, ассоциированной с идентификатором msqid, производятся следующие действия [см. intro(2)]:

  1. Значение поля msg_qnum увеличивается на 1.
  2. Значение поля msg_lspid устанавливается равным идентификатору (номеру) вызывающего процесса.
  3. Значение поля msg_stime устанавливается равным текущему времени.

Прием сообщения
Системный вызов msgrcv получает сообщение из очереди, ассоциированной с идентификатором очереди msqid, и помещает его в структуру, на которую указывает аргумент msgp. {Требуется право на чтение.} Эта структура состоит из следующих полей:


    long mtype;    /* Тип сообщения */

    char mtext []; /* Текст сообщения */

Поле mtype содержит тип получаемого сообщения, который специфицируется посылающим процессом. Поле mtext содержит текст сообщения. Значение аргумента msgsz определяет размер текста в байтах. Получаемое сообщение обрезается до msgsz байт, если его длина превышает msgsz и выражение (msgflg & MSG_NOERROR) истинно. Отброшенная часть сообщения пропадает и вызывающий процесс не получает никакого уведомления об обрезании.

Аргумент msgtyp специфицирует тип запрашиваемого сообщения в соответствии со следующими соглашениями:

  1. Если значение msgtyp равно 0, требуется первое сообщение в очереди.
  2. Если значение msgtyp больше 0, требуется первое сообщение типа msgtyp.
  3. Если значение msgtyp меньше 0, требуется первое сообщение наименьшего из типов, которые меньше или равны абсолютной величине аргумента msgtyp.

Аргумент msgflg специфицирует действия, предпринимаемые в том случае, если в очереди нет сообщения нужного типа. Эти действия следующие:

  1. Если выражение (msgflg & IPC_NOWAIT) истинно, то вызывающий процесс сразу же получает управление, ему возвращается -1 и errno присваивается значение ENOMSG.
  2. Если выражение (msgflg & IPC_NOWAIT) ложно, то выполнение вызывающего процесса приостанавливается до тех пор, пока не произойдет одно из следующих событий:
    • В очереди появляется сообщение нужного типа.
    • Идентификатор очереди сообщений удаляется из системы; в этом случае возвращается -1 и errno присваивается значение EIDRM.
    • Вызывающий процесс получает сигнал, который должен быть обработан; в этом случае получения сообщения не происходит и вызывающий процесс возобновляет выполнение так, как описано в signal(2).

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

[EINVAL]
Значение аргумента msgid не является корректным идентификатором очереди сообщений.
[EACCES]
У вызывающего процесса нет прав на выполнение операции.
[EINVAL]
Значение аргумента msgsz меньше 0.
[E2BIG]
Размер сообщения больше msgsz и выражение (msgflg & MSG_NOERROR) ложно.
[ENOMSG]
Очередь не содержит сообщения нужного типа и выражение (msgflg & IPC_NOWAIT) истинно.
[EFAULT]
Аргумент msgp указывает за пределы отведенного процессу адресного пространства.

При успешном выполнении вызова над структурой данных, ассоциированной с идентификатором msqid, производятся следующие действия [см. intro(2)]:

  1. Значение поля msg_qnum уменьшается на 1.
  2. Значение поля msg_lrpid устанавливается равным идентификатору (номеру) вызывающего процесса.
  3. Значение поля msg_rtime устанавливается равным текущему времени.

СМ. ТАКЖЕ
intro(2), msgctl(2), msget(2), signal(2).

ДИАГНОСТИКА
Если описанные выше системные вызовы завершаются неудачей из-за получения сигнала, то вызывающему процессу возвращается -1, а переменной errno присваивается значение EINTR. Если системные вызовы завершаются неудачей из-за удаления из системы идентификатора очереди msqid, то возвращается -1 и errno присваивается значение EIDRM.

При успешном завершении системных вызовов возвращаются следующие значения:

  1. Msgsnd возвращает 0.
  2. Msgrcv возвращает значение, равное количеству байт, действительно помещенных в поле mtext.

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

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

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

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

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

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

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

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

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

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

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

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

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

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