Книга: Основы программирования в Linux
msgsnd
msgsnd
Функция msgsnd
позволяет добавить сообщение в очередь сообщений:
int msgsnd(int msqid, const void *msg_ptr, size_t msg_sz, int msgflg);
Структура сообщения ограничена двумя способами. Во-первых, она должна быть меньше системного ограничения, и во-вторых, она должна начинаться с элемента типа long int
, который будет использован как тип сообщения в получающей функции. Если вы применяете сообщения, лучше всего определить структуру сообщения следующим образом.
struct my_message {
long int message_type;
/* Данные, которые вы собираетесь передавать */
}
Поскольку элемент message_type
используется при получении сообщения, вы не можете его просто игнорировать. Вы должны включить его в вашу структуру данных, и будет разумно инициализировать его с помощью известного значения.
Первый параметр msqid
— идентификатор очереди сообщений, возвращаемый функцией msgget
.
Второй параметр msg_ptr
— указатель на отправляемое сообщение, которое должно начинаться с элемента типа long int
, как описывалось ранее.
Третий параметр msg_sz
— объем сообщения, на которое указывает msg_ptr
. Этот объем не должен включать элемент типа long int
, содержащий тип сообщения.
Четвертый параметр msgflg
управляет действиями, предпринимаемыми при заполнении текущей очереди сообщений или достижении общесистемного ограничения для очередей сообщений. Если в параметре msgflg
установлен флаг IPC_NOWAIT
, функция вернет управление немедленно без отправки сообщения и возвращаемое значение будет равно -1. Если в параметре msgflg
флаг IPC_NOWAIT
сброшен, процесс отправки будет приостановлен в ожидании освобождения доступного объема в очереди.
В случае успеха функция вернет 0, а в случае аварийного завершения — -1. Если вызов был успешен, копия данных сообщения принимается и помещается в очередь сообщений.