Provided by: manpages-ru_0.98-4_all bug

ИМЯ

       ipc - механизмы межпроцессного взаимодействия System V

ОБЗОР

       # include <sys/types.h>
       # include <sys/ipc.h>
       # include <sys/msg.h>
       # include <sys/sem.h>
       # include <sys/shm.h>

ОПИСАНИЕ

       Данная  страница руководства описывает реализацию механизмов межпроцессного взаимодействия
       System V для Linux: очереди сообщений, списки семафоров  и  сегменты  разделяемой  памяти.
       Далее,  слово  ресурс  означает  сущность,  созданную  в  результате работы одного из этих
       механизмов.

   Права доступа к ресурсу
       Для каждого ресурса система использует  обобщенную  структуру  типа  struct  ipc_perm  для
       хранения  информации,  которая  необходима  для  определения прав на выполнение какой-либо
       операции ipc.  Структура ipc_perm определяется в заголовочном файле <sys/ipc.h> и содержит
       следующие поля:

               ushort cuid; /* идентификатор пользователя, создавшего ресурс */
               ushort cgid; /* идентификатор группы, создавшей ресурс */
               ushort uid; /* идентификатор владельца */
               ushort gid; /* идентификатор группы */
               ushort mode; /* права на чтение/запись */

       В  поле  mode  структуры  ipc_perm  рабочими являются младшие 9 битов и представляют собой
       права доступа к ресурсу для процесса, сделавшего ipc вызов.  Права интерпретируются так:

               0400    Чтение для пользователя
               0200    Запись для пользователя
               0040    Чтение для группы
               0020    Запись для группы
               0004    Чтение для других
               0002    Запись для других

       Биты 0100, 0010 и 0001 (биты выполнения) системой не используются.   Кроме  того  "запись"
       для списка семафоров фактически означает "изменение".

       В том же заголовочном файле также определяются следующие символьные константы:

       IPC_CREAT     Создать запись, если ключ не существует.

       IPC_EXCL      Ошибка, если ключ существует.

       IPC_NOWAIT    Ошибка, если запрос должен ждать.

       IPC_PRIVATE   Личный ключ.

       IPC_RMID      Удалить ресурс.

       IPC_SET       Установить опции ресурса.

       IPC_STAT      Получить опции ресурса.

       Заметим,  что  IPC_PRIVATE  имеет  тип  key_t,  в  то  время  как все остальные символьные
       константы являются полями-флагами, для  которых  может  выполняться  операция  логического
       сложения в переменную типа int.

   Очереди Сообщений
       Очередь   сообщений   идентифицируется  уникальным  положительным  целым  числом  (msqid),
       связанным со структурой данных типа struct msqid_ds, которая определяется  в  заголовочном
       файле <sys/msg.h>, и которая содержит следующие поля:

               struct ipc_perm msg_perm;
               ushort msg_qnum; /* количество сообщений в очереди */
               ushort msg_qbytes; /* максимальное количество байт в очереди */
               ushort  msg_lspid;  /*  pid,  идентификатор процесса, выполнившего последний вызов
       msgsnd */
               ushort msg_lrpid; /* pid, идентификатор  процесса,  выполнившего  последний  вызов
       msgrcv */
               time_t msg_stime; /* время последнего вызова msgsnd */
               time_t msg_rtime; /* время последнего вызова msgrcv */
               time_t msg_ctime; /* время последнего изменения */

       msg_perm   Структура ipc_perm задает права доступа к очереди сообщения.

       msg_qnum   Количество сообщений, которые в данный момент находятся в очереди.

       msg_qbytes Максимальное количество байтов текста сообщения, которое допускается в очереди.

       msg_lspid  Идентификатор процесса, который выполнил последний системный вызов msgsnd.

       msg_lrpid  Идентификатор процесса, который выполнил последний системный вызов msgrcv.

       msg_stime  Время, когда был выполнен последний системный вызов msgsnd.

       msg_rtime  Время, когда был выполнен последний системный вызов msgcv.

       msg_ctime  Время,  когда  был  выполнен  последний  системный  вызов,  который  изменил  в
                  структуре поле msqid_ds.

   Списки семафоров
       Список семафоров идентифицируется уникальным положительным целым числом (semid), связанным
       со  структурой  данных  типа  struct  semid_ds,  которая определяется в заголовочном файле
       <sys/sem.h> и которая содержит следующие поля:

               struct ipc_perm sem_perm;
               time_t sem_otime; /* время последней операции */
               time_t sem_ctime; /* время последнего изменения */
               ushort sem_nsems; /* количество семафоров в списке */

       sem_perm   Структура ipc_perm, которая задает права доступа к списку семафоров.

       sem_otime  Время последнего системного вызова semop.

       sem_ctime  Время  последнего  системного  вызова   semctl,   который   изменяет   значение
                  какого-либо из полей структуры или один из семафоров в списке.

       sem_nsems  Количество  семафоров  в  списке.   Семафоры в списке нумеруются положительными
                  целыми числами от нуля до sem_nsems-1.

       Семафор -- это структура данных типа struct sem, которая содержит следующие поля:

               ushort semval; /* значение семафора */
               short sempid; /* pid последней операции */
               ushort semncnt; /* Количество ожидающих увеличения semval */
               ushort semzcnt; /* Количество ожидающих установки semval в нуль */

       semval     Значение семафора: неотрицательное целое число.

       sempid     Идентификатор последнего процесса, который работал с данным семафором.

       semncnt    Количество процессов, приостановленных в ожидании увеличения semval.

       semznt     Количество процессов, приостановленных в ожидании установки значения  semval  в
                  нуль.

   Сегменты Разделяемой Памяти
       Сегмент разделяемой памяти идентифицируется уникальным положительным целым числом (shmid),
       которое связано  со  структурой  данных  типа  struct  shmid_ds,  которая  определяется  в
       заголовочном файле <sys/shm.h> и которая содержит следующие поля:

               struct ipc_perm shm_perm;
               int shm_segsz; /* размер сегмента */
               ushort shm_cpid; /* pid создателя */
               ushort shm_lpid; /* pid последней операции */
               short shm_nattch; /* Количество подключенных в данный момент */
               time_t shm_atime; /* время последнего подключения */
               time_t shm_dtime; /* время последнего отключения */
               time_t shm_ctime; /* время последнего изменения */

       shm_perm   Структура  ipc_perm,  которая  задает  права  доступа  к  разделяемому сегменту
                  памяти.

       shm_segsz  Размер разделяемого сегмента памяти в байтах.

       shm_cpid   Идентификатор процесса, который создал разделяемый сегмент памяти.

       shm_lpid   Идентификатор последнего процесса, который делал  системные  вызовы  shmat  или
                  shmdt.

       shm_nattch Количество процессов, которые в данный момент подключены к данному разделяемому
                  сегменту памяти.

       shm_atime  Время последнего системного вызова shmat.

       shm_dtime  Время последнего системного вызова shmdt.

       shm_ctime  Время последнего системного вызова shmctl, который изменил shmid_ds.

СМОТРИ ТАКЖЕ

       ftok(3), msgctl(2),  msgget(2),  msgrcv(2),  msgsnd(2),  semctl(2),  semget(2),  semop(2),
       shmat(2), shmctl(2), shmget(2), shmdt(2)

ПЕРЕВОД

       Перевёл с английского Виктор Вислобоков <corochoone@perm.ru> 2004