Читать «UNIX: взаимодействие процессов» онлайн - страница 19
Уильям Ричард Стивенс
2. Изучите заголовочный файл <errno.h> в вашей системе и выясните, как определена errno.
3. Дополните табл. 1.3 используемыми вами функциями, поддерживаемыми Unix-системами.
ГЛАВА 2
Posix IPC
2.1. Введение
Из имеющихся типов IPC следующие три могут быть отнесены к Posix IPC, то есть к методам взаимодействия процессов, соответствующим стандарту Posix:
■ очереди сообщений Posix (глава 5);
■ семафоры Posix (глава 10);
■ разделяемая память Posix (глава 13).
Эти три вида IPC обладают общими свойствами, и для работы с ними используются похожие функции. В этой главе речь пойдет об общих требованиях к полным именам файлов, используемых в качестве идентификаторов, о флагах, указываемых при открытии или создании объектов IPC, и о разрешениях на доступ к ним.
Полный список функций, используемых для работы с данными типами IPC, приведен в табл. 2.1.
Таблица 2.1. Функции Posix IPC
Очереди сообщений | Семафоры | Общая память | |
---|---|---|---|
Заголовочный файл | <mqueue.h> | <semaphore.h> | <sys/mman.h> |
Функции для создания, открытия и удаления | mq_open mq_close mq_unlink | sem_open sem_close sem_unlink sem_init sem_destroy | shm_open shm_unlink |
Операции управления | mq_getattr mq_setattr | ftruncate fstat | |
Операции IPC | mq_send mq_receive mq_notify | sem_wait sem_trywait sem_post sem_getvalue | mmap munmap |
2.2. Имена IPC
В табл. 1.2 мы отметили, что три типа IPC стандарта Posix имеют идентификаторы (имена), соответствующие этому стандарту. Имя IPC передается в качестве первого аргумента одной из трех функций: mq_open, sem_open и shm_open, причем оно не обязательно должно соответствовать реальному файлу в файловой системе. Стандарт Posix.1 накладывает на имена IPC следующие ограничения:
■ Имя должно соответствовать существующим требованиям к именам файлов (не превышать в длину РАТНМАХ байтов, включая завершающий символ с кодом 0).
■ Если имя начинается со слэша (/), вызов любой из этих функций приведет к обращению к одной и той же очереди. В противном случае результат зависит от реализации.
■ Интерпретация дополнительных слэшей в имени зависит от реализации.
Таким образом, для лучшей переносимости имена должны начинаться со слэша (/) и не содержать в себе дополнительных слэшей. К сожалению, эти правила, в свою очередь, приводят к проблемам с переносимостью.
В системе Solaris 2.6 требуется наличие начального слэша и запрещается использование дополнительных. Для очереди сообщений, например, при этом создаются три файла в каталоге /tmp, причем имена этих файлов начинаются с .MQ. Например, если аргумент функции mq_open имеет вид /queue.1234, то созданные файлы будут иметь имена /tmp/.MQDqueue.1234, /tmp/.MQLqueue.1234 и /tmp/.MQPqueue.1234. В то же время в системе Digital Unix 4.0B просто создается файл с указанным при вызове функции именем.