|
НАЗВАНИЕ
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 специфицирует действия, предпринимаемые, если выполнено хотя бы одно из следующих условий:
Системный вызов msgsnd завершается неудачей и сообщение не посылается, если выполнено хотя бы одно из следующих условий:
При успешном выполнении вызова над структурой данных, ассоциированной с идентификатором msqid, производятся следующие действия [см. intro(2)]:
Прием сообщения
Системный вызов msgrcv получает сообщение из очереди,
ассоциированной с идентификатором очереди msqid, и помещает его в структуру, на которую указывает аргумент
msgp. {Требуется право на чтение.} Эта структура состоит из следующих полей:
long mtype; /* Тип сообщения */
char mtext []; /* Текст сообщения */
Поле mtype содержит тип получаемого сообщения, который специфицируется посылающим процессом. Поле mtext содержит текст сообщения. Значение аргумента msgsz определяет размер текста в байтах. Получаемое сообщение обрезается до msgsz байт, если его длина превышает msgsz и выражение (msgflg & MSG_NOERROR) истинно. Отброшенная часть сообщения пропадает и вызывающий процесс не получает никакого уведомления об обрезании.
Аргумент msgtyp специфицирует тип запрашиваемого сообщения в соответствии со следующими соглашениями:
Аргумент msgflg специфицирует действия, предпринимаемые в том случае, если в очереди нет сообщения нужного типа. Эти действия следующие:
Системный вызов msgrcv завершается неудачей и сообщение не принимается, если выполнено хотя бы одно из следующих условий:
При успешном выполнении вызова над структурой данных, ассоциированной с идентификатором msqid, производятся следующие действия [см. intro(2)]:
СМ. ТАКЖЕ
intro(2), msgctl(2), msget(2), signal(2).
ДИАГНОСТИКА
Если описанные выше системные вызовы завершаются неудачей из-за получения сигнала, то вызывающему процессу
возвращается -1, а переменной errno присваивается значение EINTR. Если системные вызовы завершаются неудачей
из-за удаления из системы идентификатора очереди msqid,
то возвращается -1 и errno присваивается значение
EIDRM.
При успешном завершении системных вызовов возвращаются следующие значения:
В иных случаях возвращается -1, а переменной errno присваивается код ошибки.
|