Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Реализация примитивов send и receive. Системные вызовы msgsnd() и msgrcv().




Для выполнения примитива send служит системный вызов msgsnd(), копирующий пользовательское сообщение в очередь сообщений, заданную своим IPC дескриптором. При изучении описания этого вызова обратите особое внимание на следующие моменты:

· Тип данных struct msgbuf не является типом данных для пользовательских сообщений, а представляет собой лишь шаблон для создания таких типов. Пользователь сам должен создать структуру для своих сообщений, в которой первым полем обязана быть переменная типа long, содержащая положительное значение типа сообщения.

· В качестве третьего параметра - длины сообщения - указывается не вся длина структуры данных, соответствующей сообщению, а только длина полезной информации, т. е. информации, располагающейся в структуре данных после типа сообщения. Это значение может быть и равным 0 в случае, когда вся полезная информация заключается в самом факте наличия сообщения (сообщение используется как сигнальное средство связи).

· На наших занятиях мы, как правило, будем использовать нулевое значение флага системного вызова, которое приводит к блокировке процесса при отсутствии достаточного свободного места в очереди сообщений.

Примитив receive реализуется системным вызовом msgrcv(). При изучении описания этого вызова обратите особое внимание на следующие моменты:

· Тип данных struct msgbuf, как и для вызова msgsnd(), является лишь шаблоном для пользовательского типа данных.

· Способ выбора сообщения задается нулевым, положительным или отрицательным значением параметра type. Точное значение типа выбранного сообщения можно определить из соответствующего поля структуры, в которую системный вызов скопирует сообщение.

· Системный вызов возвращает длину только полезной части скопированной информации, т.е. информации, расположенной в структуре после поля типа сообщения.

· Выбранное сообщение удаляется из очереди сообщений.

· В качестве параметра length указывается максимальная длина полезной части информации, которая может быть размещена в структуре, адресованной параметром ptr.

· На наших занятиях мы будем, как правило, пользоваться нулевым значением флагов для системного вызова, которое приводит к блокировке процесса в случае отсутствия в очереди сообщений с запрошенным типом и к ошибочной ситуации в случае, когда длина информативной части выбранного сообщения превышает длину, специфицированную в параметре length.

Максимально возможная длина информативной части сообщения в операционной системе Linux составляет 4080 байт и может быть уменьшена при генерации системы. Текущее значение максимальной длины можно определить с помощью команды ipcs–l.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных