Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » sem14 - Средства System V IPC. Семафоры. Разделяемая память. Очереди сообщений.

sem14 - Средства System V IPC. Семафоры. Разделяемая память. Очереди сообщений. (Мини-учебник с ejudge = Чернокнижка), страница 4

PDF-файл sem14 - Средства System V IPC. Семафоры. Разделяемая память. Очереди сообщений. (Мини-учебник с ejudge = Чернокнижка), страница 4 Практика расчётов на ПЭВМ (37200): Книга - 3 семестрsem14 - Средства System V IPC. Семафоры. Разделяемая память. Очереди сообщений. (Мини-учебник с ejudge = Чернокнижка) - PDF, страница 4 (37200) - Студ2019-05-08СтудИзба

Описание файла

Файл "sem14 - Средства System V IPC. Семафоры. Разделяемая память. Очереди сообщений." внутри архива находится в папке "Мини-учебник с ejudge = Чернокнижка". PDF-файл из архива "Мини-учебник с ejudge = Чернокнижка", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 4 страницы из PDF

Идентификатор очереди сообщений, полученный в результате вызова msgget, указывается в параметре msqid.Выполняемая операция задаётся параметром cmd, который может принимать одно из следующих значений:• IPC_STAT. Получить информацию о данной очереди сообщений. Заполняется переменная, адрес которой указан в параметре buf.

Мы не будем здесь подробно рассматривать эту команду.13• IPC_SET. Изменить некоторые служебные данные очереди сообщений. Для этого впеременную, адрес которой передаётся в параметре buf, записываются новые значения. Эту команду мы также не будем подробно рассматривать.• IPC_RMID.

Немедленно удалить данную очередь сообщений и все связанные с нейструктуры данных. Все процессы, заблокированные на чтении из этой очереди сообщений или записи в эту очередь сообщений, разблокируются, и соответствующие системные вызовы (msgrcv или msgsnd) завершаются с ошибкой EIDRM. Процесс, выполняющий операцию удаления, должен иметь достаточный уровень привилегий, либоего эффективный идентификатор пользователя должен совпадать с идентификаторомсоздателя или владельца очереди сообщений.При успешном завершении возвращается 0, а при неуспешном — -1, и в переменнуюerrno записывается код возникшей ошибки.EACCESEFAULTEIDRMEINVALEPERMАргумент cmd равен IPC_STAT, но процесс не имеет прав на чтение из очереди сообщений.Аргумент cmd равен IPC_SET или IPC_STAT, но в параметре buf передан недопустимый адрес.Очередь сообщений уже помечена на удаление.Аргументы cmd или msqid содержат недопустимое значение.Аргумент cmd равен IPC_SET или IPC_RMID, но процесс не имеет достаточно привилегий для выполнения этой команды.3.3 Запись в очередь сообщенийДобавить сообщение в очередь сообщений можно с помощью системного вызоваmsgsnd.#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg);Данный системный вызов добавляет копию сообщения, адрес которого передан в аргумента msgp, в очередь сообщений с идентификатором, переданным в аргумент msqid.Чтобы добавить сообщение в очередь процесс должен создать структуру следующего общего вида:struct msgbuf {long mtype;char mtext[0];};/* тип сообщения, должен быть > 0 *//* данные */Поле mtext — это массив или другая структура данных, размер которой задаётся в параметре msgsz.

Допускаются сообщения нулевой длины, то есть без поля mtext. В полеmtype записывается тип сообщения — положительное целое число, которое может использоваться при чтении из очереди сообщений для фильтрации сообщений.Размер сообщения не должен превышать константы MSGMAX, конкретное значение которой зависит от реализации. Например, в ядре Linux она равна 8192 байт.Для успешной записи процесс должен иметь права на запись в очередь сообщений.14Если в буфере очереди сообщений достаточно места для нового элемента, msgsndуспешно завершается без ожидания. Ёмкость очереди сообщений задаётся полемmsg_bytes служебной структуры данных очереди. Исходное значение этого поля присоздании очереди сообщений равно MSGMNB, но оно может быть изменено с помощьюсистемного вызова msgctl, если процесс имеет суперпользовательские полномочия.Значение константы MSGMNB зависит от реализации.

В ядре Linux эта константа равна 16384байтам.Если места для нового элемента в очереди сообщений недостаточно, msgsnd блокирует процесс до тех пор, пока не освободиться достаточно места. Однако, если в аргументеmsgflg установлен флаг IPC_NOWAIT, то при отсутствии места в очереди сообщений системный вызов завершится немедленно с ошибкой EAGAIN.Если вызов msgsnd заблокировал процесс, он может также завершиться в следующихслучаях.• Очередь сообщений удалена с помощью вызова msgctl. В этом случае возвращаетсяошибка EIDRM.• Процессу был доставлен сигнал. В этом случае возвращается ошибка EINTR. Системный вызов msgsnd никогда не перезапускается, если был прерван поступлением сигнала, даже если флаг SA_RESTART был задан при установке обработчика сигнала.При успешном завершении msgsnd возвращает 0, а при ошибке — -1, и в переменнуюerrno записывается код ошибки.

Возможные коды ошибок приведены ниже.EAGAINEACCESEFAULTEIDRMEINTREINVALENOMEMСообщение не может быть добавлено в очередь, так как в данный момент в очерединет достаточно места, и флаг IPC_NOWAIT указан в аргументе msgflg.Процесс не имеет прав записи в данную очередь сообщений.В аргументе msgp передан недопустимый адрес.Очередь сообщений была удалена.При ожидании освобождения места в очереди процесс получил и обработал сигнал.Недопустимое значение аргумента msqid или неположительное значение поляmtype, или недопустимое значение аргумента msgsz (меньшее чем 0 или большеечем MSGMAX).У ядра недостаточно памяти, чтобы сделать копию сообщения msgbuf.3.4 Чтение из очереди сообщенийДля чтения из очереди сообщений используется функция msgrcv.#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz,long msgtyp, int msgflg);Этот системный вызов считывает одно сообщение из очереди сообщений, идентификатор которой задаётся в аргументе msqid.

Аргумент msgp задаёт адрес буфера для чтениясообщения. После успешного чтения сообщение удаляется из очереди.Аргумент msgsz задаёт максимальный размер в байтах поля mtext переменной, адрескоторой указан аргументом msgp. Если длина сообщения больше, чем значение аргумента msgsz, и у аргумента msgflg установлен флаг MSG_NOERROR, сообщение будет обрезано по заданной длине, и обрезанная часть будет потеряна. Если флаг MSG_NOERROR не15установлен, сообщение не удаляется из очереди, а системный вызов завершается с ошибкойE2BIG.Чтобы считать сообщение из очереди процесс должен создать структуру следующего общего вида:struct msgbuf {long mtype;char mtext[0];};/* тип сообщения, должен быть > 0 *//* данные */Поле mtext — это массив или другая структура данных, размер которой задаётся в параметре msgsz. Допускаются сообщения нулевой длины, то есть без поля mtext.

Если размер первого подходящего сообщения превысит значение аргумента msgsz, системный вызовmsgrcv завершится с ошибкой, или сообщение будет обрезано.Если функция msgrcv завершилась успешно, в поле mtype записывается тип сообщения — положительное целое число, а в поле mtext — содержимое сообщения.Чтобы читать из очереди сообщения, процесс должен иметь права на чтение для своегоэффективного идентификатора пользователя.Аргумент msgtyp задаёт ожидаемый тип сообщения.

Аргумент может принимать следующие значения.• Если msgtyp равен 0, считывается первое сообщение из очереди.• Если msgtyp больше 0, считывается первое сообщение в очереди, тип которого совпадает с msgtyp. Но если в аргументе msgflg установлен флаг MSG_EXCEPT, считывается первое сообщение в очереди, тип которого не совпадает с msgtyp.• Если msgtyp меньше 0, считывается первое сообщение из очереди, тип которого меньше либо равен абсолютному значению аргумента msgtyp.В аргументе msgflg могут быть заданы 0 или более флагов, изменяющих работу системного вызова msgrcv.• IPC_NOWAIT. Если флаг установлен, msgrcv возвращается немедленно с кодомошибки ENOMSG, если сообщение требуемого типа в очереди отсутствует.• MSG_EXCEPT.

Используется вместе с положительным значением аргумента msgtypдля чтения первого сообщения в очереди, тип которого не равен msgtyp.• MSG_NOERROR. Если флаг установлен, сообщение обрезается, если его длина превышает msgsz байт.Если в очереди отсутствует сообщение требуемого типа, и флаг IPC_NOWAIT не былустановлен в аргументе msgflg, процесс блокируется до наступления одного из следующихусловий.• Сообщение требуемого типа помещено в очередь.• Очередь сообщений удалена. В этом случае системный вызов завершается с ошибкойEIDRM.16• Процесс получил и обработал сигнал. В этом случае системный вызов завершаетсяс ошибкой EINTR. Системный вызов msgrcv никогда не перезапускается, если былпрерван поступлением сигнала, даже если флаг SA_RESTART был задан при установкеобработчика сигнала.При успешном завершении системный вызов возвращает действительную длину сообщения, скопированного в поле mtext.

При ошибке возвращается -1, а в переменную errnoзаписывается код ошибки.E2BIGEACCESEFAULTEIDRMEINTREINVALENOMSGДлина сообщения больше, чем значение аргумента msgsz, а флаг MSG_NOERROR варгументе msgflg не установлен.Процесс не имеет прав на чтение из данной очереди сообщений.Недопустимый адрес передан в аргументе msgp.Процесс был заблокирован на ожидании поступления сообщения, но очередь сообщений в это время была удалена.Процесс был заблокирован на ожидании поступления сообщений, но поступил и былобработан сигнал.Недопустимое значение аргумента msgqid, или значение аргумента msgsz меньше0.В аргументе msgflg установлен флаг IPC_NOWAIT, и в очереди сообщений нет сообщения требуемого типа.17.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5304
Авторов
на СтудИзбе
416
Средний доход
с одного платного файла
Обучение Подробнее