Статья: Механизмы межпроцессных взаимодействий в операционной системе Unix
Флаг IPC_NOWAIT заставляет ядро ОС UNIX не блокировать текущий процесс
лишь сообщать в ответных параметрах о возникновении ситуации, приведшей бы к блокированию процесса
semctl(id, number, cmd, arg);
id - это дескриптор группы семафоров
number - номер семафора в группе
cmd - код операции
arg - указатель на структуру, содержимое которой интерпретируется в зависимости от операции
Можно уничтожить индивидуальный семафор в указанной группе
Очереди сообщений
Четыре системных вызова:
msgget для образования новой очереди сообщений или получения дескриптора существующей очереди
msgsnd для посылки сообщения (его постановки в очередь сообщений)
msgrcv для приема сообщения (выборки сообщения из очереди)
msgctl для выполнения управляющих действий
msgqid = msgget(key, flag);
Сообщения хранятся в виде связного списка
Декскриптор очереди сообщений - индекс в массиве заголовков очередей сообщений
В заголовке очереди хранятся:
указатели на первое и последнее сообщение в данной очереди
число сообщений
общий размер в байтах сообщений, находящихся в очереди
идентификаторы процессов, которые последними послали или приняли сообщение через данную очередь
временные метки последних выполненных операций msgsnd, msgrsv и msgctl
Структуры данных, используемые для организации очередей сообщений
msgsnd(msgqid, msg, count, flag);
msg - это указатель на структуру, содержащую целочисленный тип сообщения и символьный массив
count - задает размер сообщения в байтах
flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти