Читать «UNIX: взаимодействие процессов» онлайн - страница 25
Уильям Ричард Стивенс
Информация о функциях сведена в табл. 3.1.
Таблица 3.1. Функции System V IPC
Очереди сообщений | Семафоры | Общая память | |
---|---|---|---|
Заголовочный файл | <sys/msg.h> | <sys/sem.h> | <sys/shm.h> |
Создание или открытие | msgget | semget | shmget |
Операции управления | msgctl | semctl | shmctl |
Операции IPC | msgsnd msgrcv | semop | shmat shmdt |
ПРИМЕЧАНИЕ
Информация об истории разработки и развития функций System V IPC не слишком легко доступна. [16] предоставляет следующую информацию: очереди сообщений, семафоры и разделяемая память этого типа были разработаны в конце 70-х в одном из филиалов Bell Laboratories в городе Колумбус, штат Огайо, для одной из версий Unix, предназначенной для внутреннего использования. Версия эта называлась Columbus Unix, или CB Unix. Она использовалась в так называемых системах поддержки операций — системах обработки транзакций — для автоматизации управления и ведения записей в телефонной компании. System V IPC были добавлены в коммерческую версию Unix System V. приблизительно в 1983 году.
3.2. Ключи типа key_t и функция ftok
В табл. 1.2 было отмечено, что в именах трех типов System V IPC использовались значения key_t. Заголовочный файл <sys/types.h> определяет тип key_t как целое (по меньшей мере 32-разрядное). Значения переменным этого типа обычно присваиваются функцией ftok.
Функция ftok преобразовывает существующее полное имя и целочисленный идентификатор в значение типа key_t (называемое ключом IPC — IPC key):
#include <sys/ipc.h>
key_t ftok(const char
//Возвращает ключ IPC либо –1 при возникновении ошибки
На самом деле функция использует полное имя файла и младшие 8 бит идентификатора для формирования целочисленного ключа IPC.
Эта функция действует в предположении, что для конкретного приложения, использующего IPC, клиент и сервер используют одно и то же полное имя объекта IPC, имеющее какое-то значение в контексте приложения. Это может быть имя демона сервера или имя файла данных, используемого сервером, или имя еще какого-нибудь объекта файловой системы. Если клиенту и серверу для связи требуется только один канал IPC, идентификатору можно присвоить, например, значение 1. Если требуется несколько каналов IPC (например, один от сервера к клиенту и один в обратную сторону), идентификаторы должны иметь разные значения: например, 1 и 2. После того как клиент и сервер договорятся о полном имени и идентификаторе, они оба вызывают функцию ftok для получения одинакового ключа IPC.
Большинство реализаций ftok вызывают функцию stat, а затем объединяют:
■ информацию о файловой системе, к которой относится полное имя