3.4. Создание и открытие каналов IPC

3.4. Создание и открытие каналов IPC

Три функции getXXX, используемые для создания или открытия объектов IPC (табл. 3.1), принимают ключ IPC (типа key_t) в качестве одного из аргументов и возвращают целочисленный идентификатор. Этот идентификатор отличается от того, который передавался функции ftok, как мы вскоре увидим. У приложения есть две возможности задания ключа (первого аргумента функций getXXX):

1. Вызвать ftok, передать ей полное имя и идентификатор.

2. Указать в качестве ключа константу IPCPRIVATE, гарантирующую создание нового уникального объекта IPC.

Последовательность действий иллюстрирует рис. 3.1. 

Рис. 3.1. Вычисление идентификаторов IPC по ключам

Все три функции getXXX (табл. 3.1) принимают в качестве второго аргумента набор флагов oflag, задающий биты разрешений чтения-записи (поле mode структуры ipc_perm) для объекта IPC и определяющий, создается ли новый объект IPC или производится обращение к уже существующему. Для этого имеются следующие правила.

? Ключ IPC_PRIVATE гарантирует создание уникального объекта IPC. Никакие возможные комбинации полного имени и идентификатора не могут привести к тому, что функция ftok вернет в качестве ключа значение IPC_PRIVATE.

? Установка бита IPC_CREAT аргумента oflag приводит к созданию новой записи для указанного ключа, если она еще не существует. Если же обнаруживается существующая запись, возвращается ее идентификатор. 

Одновременная установка битов IPC_CREAT и IPC_EXCL аргумента oflag приводит к созданию новой записи для указанного ключа только в том случае, если такая запись еще не существует. Если же обнаруживается существующая запись, функция возвращает ошибку EEXIST (объект IPC уже существует).

Комбинация IPC_CREAT и IPC_EXCL в отношении объектов IPC действует аналогично комбинации O_CREAT и O_EXCL для функции open.

Установка только бита IPC_EXCL без IPC_CREAT никакого эффекта не дает.

Логическая диаграмма последовательности действий при открытии объекта IPC изображена на рис. 3.2. В табл. 3.2 показан альтернативный взгляд на этот процесс.

Рис. 3.2. Диаграмма открытия объекта IPC

Обратите внимание, что в средней строке табл. 3.2 для флага IPC_CREAT без IPC_EXCL мы не получаем никакой информации о том, был ли создан новый объект или получен доступ к существующему. Для большинства приложений характерно создание сервером объекта IPC с указанием IPC_CREAT (если безразлично, существует ли уже объект) или IPC_CREAT | IPC_EXCL (если требуется проверка существования объекта). Клиент вообще не указывает флагов, предполагая, что сервер уже создал объект.

ПРИМЕЧАНИЕ

Функции System V IPC в отличие от функций Posix IPC определяют свои собственные константы IРС_ххх вместо использования O_CREAT и OEXCL, принимаемых стандартной функцией open (табл. 2.2).

Обратите также внимание на то, что функции System V IPC совмещают константы IРС_ххх с битами разрешений (описанными в следующем разделе) в едином аргументе oflag, тогда как для функции open и для Posix IPC характерно наличие двух аргументов: oflag, в котором задаются флаги вида О_ххх, и mode, определяющего биты разрешений доступа.

Таблица 3.2. Логика создания и открытия объектов IPC

Аргумент oflag Ключ не существует Ключ существует
Специальные флаги не установлены Ошибка, errno=ENOENT OK, открытие существующего объекта
IPC_CREAT OK, создается новая запись OK, открытие существующего
IPC CREAT|IPC_EXCL OK, создается новая запись Ошибка, errno=EEXIST
Поделитесь на страничке

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

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

Создание и открытие

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Создание и открытие Создание и открытие проекта аналогичны таким же действиям в любой программе, работающей с сохраняемыми на диск документами, например с текстовым редактором (Блокнот, Microsoft Word).Если в параметрах проектов не установлен флажок Авт. сохранять и загружать


Создание, сохранение и открытие проекта

Из книги ArchiCAD. Начали! автора Орлов Андрей Александрович

Создание, сохранение и открытие проекта Создать новый файл проекта можно с помощью одного из следующих действий: Рис. 1.2. Рабочая среда программы ArchiCAD? нажать кнопку расположенную на панели инструментов Standard (Стандартная);? выполнить команду File ? New (Файл ? Создать) меню


Открытие и создание файлов

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Открытие и создание файлов После создания объекта класса CFile можно открыть файл, вызвав метод Open. Методу Open надо указать путь к открываемому файлу и режим его использования. Прототип метода Open имеет следующий вид:virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);В качестве


Изображение. Его создание, открытие и параметры

Из книги Photoshop CS3: Обучающий курс автора Тимофеев Сергей Михайлович

Изображение. Его создание, открытие и параметры Базовым элементом при работе в Adobe Photoshop, объектом является само изображение, которое мы создаем или редактируем. После загрузки программы появляется лишь сам редактор с уже рассмотренными нами основными элементами


3.4. Создание и открытие каналов IPC

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

3.4. Создание и открытие каналов IPC Три функции getXXX, используемые для создания или открытия объектов IPC (табл. 3.1), принимают ключ IPC (типа key_t) в качестве одного из аргументов и возвращают целочисленный идентификатор. Этот идентификатор отличается от того, который


Создание и открытие файла

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Создание и открытие файла Поскольку данная функция является первой из функций Windows, к изучению которых мы приступаем, ее описание будет несколько более подробным по сравнению с остальными; для других функций часто будут приводиться лишь краткие описания. Вместе с тем,


Создание именованных каналов

Из книги Веб-Самоделкин. Как самому создать сайт быстро и профессионально автора Гладкий Алексей Анатольевич

Создание именованных каналов Серверами именованных каналов могут быть только системы на основе Windows NT (как обычно, здесь имеются в виду версия 4.0 и последующие); системы на базе Windows 9x могут выступать только в роли клиентов.Прототип функции CreateNamedPipe представлен ниже. HANDLE


Создание и открытие почтового ящика

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Создание и открытие почтового ящика Для создания почтового ящика и получения дескриптора, который можно будет использовать в операциях ReadFile, почтовые серверы (программы считывания) вызывают функцию CreateMailslot. На одном компьютере может находиться только один почтовый


Создание, подключение и именование каналов и почтовых ящиков

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Создание, подключение и именование каналов и почтовых ящиков В табл. 11.1 сведены все допустимые формы имен каналов, которые могут использоваться клиентами и серверами приложения. Здесь же перечислены все функции, которые следует использовать для создания именованных


Создание, открытие и сохранение веб-страниц

Из книги Linux программирование в примерах автора Роббинс Арнольд

Создание, открытие и сохранение веб-страниц С помощью программы вы можете создавать новые веб-страницы, а также редактировать созданные ранее.Чтобы создать новую веб-страницу, нужно выполнить команду главного меню Файл ?


Создание, открытие и сохранение документов

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

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


11.4.1. Создание входных точек устройств и именованных каналов

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

11.4.1. Создание входных точек устройств и именованных каналов Процессы создают файлы устройств и именованных каналов в файловой системе с помощью вызова mknod().#include <fcntl.h>#include <unistd.h>int mknod(const char *pathname, mode_t mode, dev_t dev);pathname — это имя файла, который нужно создать, mode — это и


11.6. Создание неименованных каналов

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

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


5.4.1. Создание каналов

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

5.4.1. Создание каналов Канал создается с помощью функции pipe(). Ей необходимо передать массив из двух целых чисел. В элементе с индексом 0 функция сохраняет дескриптор файла, соответствующего выходному концу канала, а в элементе с индексом 1 сохраняется дескриптор файла,