26.5.6. Тотальный контроль

26.5.6. Тотальный контроль

До сих пор мы рассматривали только системные вызовы для работы с сообщениями очереди, сейчас рассмотрим системный вызов msgctl(), предназначенный для контроля самой очереди.

int msgctl(int msgqid, int cmd, struct msqid_ds *buf);

Первый аргумент — это ID очереди, второй — команда, которую нужно выполнить:

? IPC_STAT — записывает в буфер buf структуру msqid_ds для очереди сообщений с идентификатором msgqid.

? IPC_SET — устанавливает значение ipc_perm структуры msqid. Значение берется из буфера buf.

? IPC_RMID — удаляет очередь.

Системный вызов возвращает 0 в случае успеха и -1, если произошла ошибка. Переменная errno устанавливается следующим образом:

? EACCESS — недостаточно прав.

? EFAULT — невозможно получить доступ к адресу буфера buf или неверный адрес.

? EIDRM — очередь была уничтожена прямо во время запроса.

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

? EPERM — у вас нет прав на запись в очередь.

Структура msqid_ds уже рассматривалась ранее, поэтому не вижу смысла приводить ее описание еще раз.

Если подытожить, то все, что мы можем сделать с очередью — это удалить ее и изменить права доступа или информацию о владельце (его UID и GID). Как удалить, думаю, понятно. Напишем функцию change_mode(), которая будет изменять права доступа к нашей очереди. Ей нужно передать два параметра — идентификатор очереди и новый режим доступа в виде строки, например, "0660".

int change_mode(int id, char *mode) {

 struct msqid_ds buf;

 /* Получаем копию структуры в буфер buf */

 if (msgctl(id, IPC_STAT, &buf) == -1) {

  return(-1);

 }

 /* Изменяем права доступа */

 sscanf(mode, "%ho", &buf.msg_perm.mode);

 /* Модернизируем внутреннюю структуру */

 if (msgctl(id, IPC_SET, &buf) == -1} {

  return(-1);

 }

 return(0);

}

Наша функция возвращает 0 в случае успеха или -1, если произошла ошибка.

На этом обзор средств для работы с очередями сообщений можно считать законченным, теперь с чистой совестью перейдем к следующему средству IPC — семафорам.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

3.2.3.1. Орфографический контроль

Из книги Прикладное программное обеспечение: системы автоматической обработки текстов автора Мальковский Михаил Георгиевич

3.2.3.1. Орфографический контроль Программы орфографического контроля обнаруживают (и предлагают варианты исправления) мотивированные грамматические ошибки в основах и окончаниях (флексиях) слов, записанных в словарь системы, и слов, встретившихся ей впервые (незнакомых),


3.2.3.3. Стилистический контроль

Из книги Сущность технологии СОМ. Библиотека программиста автора Бокс Дональд

3.2.3.3. Стилистический контроль Программы данного блока фиксируют внешние характеристики фраз, свидетельствующие о сложности их структуры, а следовательно, и о сложности восприятия смысла. Имеются, например, программы, контролирующие длину фраз, количество запятых,


3.2.3.5. Синтаксический контроль

Из книги Процессы жизненного цикла программных средств автора Автор неизвестен

3.2.3.5. Синтаксический контроль Программа СИНТ1Программа СИНТ1 находит в указанной области именные словосочетания вида ‹прилагательное› + ‹существительное› и ‹существительное› + ‹существительное в форме родит. падежа› и др. Программа может оказаться


3.2.3.6. Пунктуационный контроль

Из книги ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ВСТРОЕННЫХ СИСТЕМ. Общие требования к разработке и документированию автора Госстандарт России

3.2.3.6. Пунктуационный контроль Пунктуационные ошибки в реальных предложениях русского языка встречаются довольно часто. Разделим их условно на две группы. Ошибки одной группы связаны с уровнем пунктуационной грамотности и появляются в основном в тех типах текстов


3.2.3.7. Семантический контроль

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

3.2.3.7. Семантический контроль Программа СЕМ1Программа обнаруживает несовпадение ожидаемых семантических признаков актантов (подлежащее, дополнения) глагола и признаков слов (групп слов), реально занимающих соответствующие позиции. Такое несовпадение мешает завершить


Контроль доступа

Из книги Windows Vista без напряга автора Жвалевский Андрей Валентинович


Контроль анимации

Из книги автора

Контроль анимации Следующей задачей является обеспечение гарантий того, что тип Timer сместит текущий фрейм визуализации в рамках PictureBox. Снова напомним, что число фреймов в цикле анимации зависит от текущей скорости автомобиля. Необходимость изменений изображений в PictureBox


Родительский контроль

Из книги автора

Родительский контроль Дети очень быстро учатся пользоваться компьютером. Безо всяких книг, систем помощи или компьютерных курсов.Правда, пользуются дети компьютером только для игр (где они этого насмотрелись?!). Ну, еще для путешествий по Интернету, где они только болтают


Контроль над Помощником

Из книги автора

Контроль над Помощником Используйте свойства объекта Assistant (табл. 14.1) для контроля за тем, как и когдаПомощник по Office будет появляться на экране. Пока вы не уверены в том. что Помощник уже включен, убедитесь в том, что его свойство On имеет значение True, прежде чем пытаться


Родительский контроль

Из книги автора

Родительский контроль Существует способ ограничить доступ детей к определенным сайтам, играм, да и, вообще, к самому компьютеру. Скажем, после 21 часа работа на компьютере запрещена.Для этого в панели управления создается для ребенка учетная запись с ограниченными


Контроль ошибок

Из книги автора

Контроль ошибок Существует широко распространенная проблема, связанная с вводом в машину данных, которые должны использоваться определенным образом. Один из методов ее решения состоит в "контроле ошибок". Это означает, что, перед тем как приступить к обработке данных,