Главная страница Взаимодействие нетривиальных процессов Первые три строки описывают тип доступа к создаваемому объекту: только чтение, только запись, чтение и запись. Очередь сообщений может быть открыта в любом из трех режимов доступа, тогда как для семафора указание этих констант не требуется (для любой операции с семафором требуется доступ на чтение и запись). Наконец, объект разделяемой памяти не может быть открыт только на запись. Указание прочих флагов из табл. 2.2 не является обязательным. 0 CREAT - создание очереди сообщений, семафора или сегмента разделяемой памяти, если таковой еще не существует (см. также флаг 0 EXCL, влияющий на результат). При создании новой очереди сообщений, семафора или сегмента разделяемой памяти требуется указание по крайней мере одного дополнительного аргумента, определяющего режим. Этот аргумент указывает биты разрешения на доступ к файлу и формируется путем побитового логического сложения констант из табл. 2.3. Таблица 2.3. Константы режима доступа при создании нового объекта IPC Константа Описание S IRUSR Владелец - чтение S IWUSR Владелец - запись SJRGRP Группа - чтение S IWGRP Группа - запись S IROTH Прочие - чтение S IWOTH Прочие - запись Эти константы определены в заголовке <sys/stat.h>. Указанные биты разрешений изменяются наложением маски режима создания файлов для данного процесса (с. 83-85 [21]) или с помощью команды интерпретатора umask. Как и со вновь созданным файлом, при создании очереди сообщений, семафора или сегмента разделяемой памяти им присваивается идентификатор пользователя, соответствующий действующему (effective) идентификатору пользователя процесса. Идентификатор группы семафора или сегмента разделяемой памяти устанавливается равным действующему групповому идентификатору процесса или групповому идентификатору, установленному по умолчанию для системы в целом. Групповой идентификатор очереди сообщений всегда устанавливается равным действующему групповому идентификатору процесса (на с. 77-78 [21] рассказывается о групповых и пользовательских идентификаторах более подробно). ПРИМЕЧАНИЕ-- Кажется странным наличие разницы в установке группового идентификатора для разных видов Posix IPC. Групповой идентификатор нового файла, создаваемого с помощью функции open, устанавливается равным либо действительному идентификатору группы процесса, либо идентификатору группы каталога, в котором создается файл, но функции IPC не могут заранее предполагать, что для объекта IPC создается реальный файл в файловой системе. 0 EXCL - если этот флаг указан одновременно с 0 CREAT, функция создает новую очередь сообщений, семафор или объект разделяемой памяти только в том случае, если таковой не существует. Если объект уже существует и указаны флаги 0 CREAT I 0 EXCL, возвращается ошибка EEXIST. Проверка существования очереди сообщений, семафора или сегмента разделяемой памяти и его создание (в случае отсутствия) должны производиты;я только одним процессом. Два аналогичных флага имеются и в System V IPC, они описаны в разделе 3.4. 0 NONBLOCK - этот флаг создает очередь сообщений без блокировки. Блокировка обычно устанавливается для считывания из пустой очереди или записи в полную очередь. Об этом более подробно рассказано в подразделах, посвященных функциям mq send и mq recei ve раздела 5.4. 0 TRUNC - если уже существующий сегмент общей памяти открыт на чтение и запись, этот флаг указывает на необходимость сократить его размер до 0. На рис. 2.1 показана реальная последовательность логических операций при открытии объекта IPC. Что именно подразумевается под проверкой разрешений доступа, вы узнаете в разделе 2.4. Другой подход к изображенному на рис. 2.1 представлен в табл. 2.4. создается новый объект обращение к существующему объекту создание нового объекта i к нет начало системные таблицы заполнены? объект уже существует? нет -► установлен флаг О GREAT?
возвращает ошибку. ermo=EEXIST возвращает ошибку, ~ ermosEACCES возвращает ошибку, ermo=ENOSPC возвращает ошибку, ermo=ENOENT Рис. 2.1. Логика открытия объекта IPC Обратите внимание, что в средней строке табл. 2.4, где задан только флаг 0 CREAT, мы не получаем никакой информации о том, был ли создан новый объект или открыт существующий. 2.4. Разрешения IPC Таблица 2.4. Логика открытия объекта IPC
2.4. Разрешения IPC Новая очередь сообщений, именованный семафор или сегмент разделяемой памяти создается функциями mq open, sem open и shm open, при условии, что аргумент o/7ag содержит константу 0 CREAT. Согласно табл. 2.3, любому из данных типов IPC присваиваются определенные права доступа (permissions), аналогичные разрешениям доступа к файлам в Unix. При открытии существующей очереди сообщений, семафора или сегмента разделяемой памяти теми же функциями (в случае, когда не указан флаг 0 CREAT или указан 0 CREAT без 0 EXCL и объект уже существует) производится проверка разрешений: 1. Проверяются биты разрешений, присвоенные объекту IPC при создании. 2. Проверяется запрошенный тип доступа (0 RDONLY, 0 WRONLY. 0 RDWR). 3. Проверяется действующий идентификатор пользователя вызывающего процесса, действующий групповой идентификатор процесса и дополнительные групповые идентификаторы процесса (последние могут не поддерживаться). Большинством систем Unix производятся следующие конкретные проверки: 1. Если действующий идентификатор пользователя для процесса есть О (привилегированный пользователь), доступ будет разрешен. 2. Если действующий идентификатор пользователя процесса совпадает с идентификатором владельца объекта IPC: если соответствующий бит разрешения для пользователя установлен, доступ разрешен, иначе в доступе отказывается. Под соответствующим битом разрешения мы подразумеваем, например, бит разрешения на чтение, если процесс открывает объект только для чтения. Если процесс открывает объект для записи, должен быть установлен соответственно бит разрешения на запись для владельца (user-write). 3. Если действующий идентификатор группы процесса или один из дополнительных групповых идентификаторов процесса совпадает с групповым идентификатором объекта IPC: если соответствующий бит разрешения для группы установлен, доступ будет разрешен, иначе в доступе отказывается. 4. Если соответствующий бит разрешения доступа для прочих пользователей установлен, доступ будет разрешен, иначе в доступе будет отказано.
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |