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Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Создание, открытие и сохранение веб-страниц
Создание, открытие и сохранение веб-страниц С помощью программы вы можете создавать новые веб-страницы, а также редактировать созданные ранее.Чтобы создать новую веб-страницу, нужно выполнить команду главного меню Файл ?
Создание, открытие и сохранение документов
Создание, открытие и сохранение документов Чтобы начать работу с документом, его необходимо вначале создать. Как мы уже отмечали ранее, программа по умолчанию создает новый документ при запуске, однако в процессе работы может потребоваться последовательное создание
Создание и открытие файла
Создание и открытие файла Поскольку данная функция является первой из функций Windows, к изучению которых мы приступаем, ее описание будет несколько более подробным по сравнению с остальными; для других функций часто будут приводиться лишь краткие описания. Вместе с тем,
Создание именованных каналов
Создание именованных каналов Серверами именованных каналов могут быть только системы на основе Windows NT (как обычно, здесь имеются в виду версия 4.0 и последующие); системы на базе Windows 9x могут выступать только в роли клиентов.Прототип функции CreateNamedPipe представлен ниже. HANDLE
Создание и открытие почтового ящика
Создание и открытие почтового ящика Для создания почтового ящика и получения дескриптора, который можно будет использовать в операциях ReadFile, почтовые серверы (программы считывания) вызывают функцию CreateMailslot. На одном компьютере может находиться только один почтовый
Создание, подключение и именование каналов и почтовых ящиков
Создание, подключение и именование каналов и почтовых ящиков В табл. 11.1 сведены все допустимые формы имен каналов, которые могут использоваться клиентами и серверами приложения. Здесь же перечислены все функции, которые следует использовать для создания именованных
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. Создание неименованных каналов Неименованные каналы подобны именованным, но они в файловой системе не существуют. Они не имеют путевых имен, ассоциированных с ними, и все они и их следы исчезают после того, как последний файловый дескриптор, ссылающийся на них,
3.4. Создание и открытие каналов IPC
3.4. Создание и открытие каналов IPC Три функции getXXX, используемые для создания или открытия объектов IPC (табл. 3.1), принимают ключ IPC (типа key_t) в качестве одного из аргументов и возвращают целочисленный идентификатор. Этот идентификатор отличается от того, который
Изображение. Его создание, открытие и параметры
Изображение. Его создание, открытие и параметры Базовым элементом при работе в Adobe Photoshop, объектом является само изображение, которое мы создаем или редактируем. После загрузки программы появляется лишь сам редактор с уже рассмотренными нами основными элементами
5.4.1. Создание каналов
5.4.1. Создание каналов Канал создается с помощью функции pipe(). Ей необходимо передать массив из двух целых чисел. В элементе с индексом 0 функция сохраняет дескриптор файла, соответствующего выходному концу канала, а в элементе с индексом 1 сохраняется дескриптор файла,
Создание, сохранение и открытие проекта
Создание, сохранение и открытие проекта Создать новый файл проекта можно с помощью одного из следующих действий: Рис. 1.2. Рабочая среда программы ArchiCAD? нажать кнопку расположенную на панели инструментов Standard (Стандартная);? выполнить команду File ? New (Файл ? Создать) меню
Создание и открытие
Создание и открытие Создание и открытие проекта аналогичны таким же действиям в любой программе, работающей с сохраняемыми на диск документами, например с текстовым редактором (Блокнот, Microsoft Word).Если в параметрах проектов не установлен флажок Авт. сохранять и загружать
Открытие и создание файлов
Открытие и создание файлов После создания объекта класса CFile можно открыть файл, вызвав метод Open. Методу Open надо указать путь к открываемому файлу и режим его использования. Прототип метода Open имеет следующий вид:virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);В качестве