ТОР 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. Не нашли, что искали? Воспользуйтесь поиском:
|