Управление ресурсами в ОС UNIX

       

Int msgsnd (int msgqid, void *msg, size_t size, int flag),


где msg - это указатель на структуру длиной size, содержащую определяемый пользователем целочисленный тип сообщения и символьный массив-сообщение.

Структура msg имеет вид:

struct msg {

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

char mtext[SOMEVALUE]; /* текст сообщения (SOMEVALUE - любое */};

Параметр flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти (флаг IPC_NOWAIT со значением, рассмотренным выше).

Условиями успешной постановки сообщения в очередь являются:

  • наличие прав процесса по записи в данную очередь сообщений;
  • не превышение длиной сообщения заданного системой верхнего предела;
  • положительное значение указанного в сообщении типа сообщения.
  • Если же оказывается, что новое сообщение невозможно буферизовать в ядре по причине превышения верхнего предела суммарной длины сообщений, находящихся в данной очереди сообщений (флаг IPC_NOWAIT при этом отсутствует), то обратившийся процесс откладывается (усыпляется) до тех пор, пока очередь сообщений не разгрузится процессами, ожидающими получения сообщений.

    Для приема сообщения используется системный вызов msgrcv():



    Содержание раздела