table of contents
        
      
      
    | SVIPC(7) | Руководство программиста Linux | SVIPC(7) | 
ИМЯ¶
svipc - механизмы межпроцессного взаимодействия System V
ОБЗОР¶
#include <sys/msg.h> #include <sys/sem.h> #include <sys/shm.h>
ОПИСАНИЕ¶
Данная справочная страница описывает реализацию механизмов межпроцессного взаимодействия (IPC) System V в Linux: очереди сообщений, наборы семафоров и сегменты разделяемой памяти. В дальнейшем под словом ресурс будет подразумеваться экземпляр одного из этих механизмов.
Права доступа к ресурсу¶
Для
    каждого
    ресурса
    система
    использует
    общую
    структуру
    типа struct ipc_perm,
    хранящую
    необходимую
    информацию
    о правах
    для
    проведения
    IPC-операции.
    Структура
    ipc_perm
    включает
    следующие
    поля:
  
struct ipc_perm {
    uid_t          cuid;   /* ID пользователя создателя */
    gid_t          cgid;   /* ID группы создателя */
    uid_t          uid;    /* ID пользователя владельца */
    gid_t          gid;    /* ID группы владельца */
    unsigned short 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 msqid_ds {
    struct ipc_perm msg_perm;
    msgqnum_t       msg_qnum;    /* в очереди не сообщений */
    msglen_t        msg_qbytes;  /* макс. байт в очереди */
    pid_t           msg_lspid;   /* PID последнего вызова  msgsnd(2) */
    pid_t           msg_lrpid;   /* PID последнего вызова msgrcv(2) */
    time_t          msg_stime;   /* время последнего msgsnd(2) */
    time_t          msg_rtime;   /* время последнего  msgrcv(2) */
    time_t          msg_ctime;   /* последнее время изменения */
};
- msg_perm
- Структура ipc_perm, определяющая права доступа к очереди сообщений.
- msg_qnum
- Число сообщений, находящихся в данный момент в очереди сообщений.
- msg_qbytes
- Максимальная длина сообщения в байтах, разрешенная в очереди сообщений.
- msg_lspid
- ID процесса, выполнившего последний системный вызов msgsnd(2).
- msg_lrpid
- ID процесса, выполнившего последний системный вызов msgrcv(2).
- msg_stime
- Время последнего вызова msgsnd(2).
- msg_rtime
- Время последнего вызова msgrcv(2).
- msg_ctime
- Время последнего системного вызова, изменившего поля структуры msgid_ds.
Наборы семафоров¶
Набор
    семафора
    уникально
    идентифицируется
    положительным
    целым (semid) и
    имеет
    связанную
    структуру
    типа struct semid_ds,
    определенную
    в <sys/sem.h> и
    содержащую
    следующие
    поля:
  
struct semid_ds {
    struct ipc_perm sem_perm;
    time_t          sem_otime;   /* время последней операции */
    time_t          sem_ctime;   /* время последнего изменения */
    unsigned long   sem_nsems;   /* число семафоров в наборе */
};
- sem_perm
- Структура ipc_perm, определяющая права доступа к набору семафоров.
- sem_otime
- Время последнего системного вызова semop(2).
- sem_ctime
- Время последнего системного вызова semctl(2), который изменил поле указанной структуры или один из семафоров, принадлежащих набору.
- sem_nsems
- Число семафоров в наборе. Каждый семафор описывается неотрицательным целым числом от 0 до sem_nsems-1.
Семафор
    является
    структурой
    данных
    типа struct sem,
    содержащие
    следующие
    поля:
  
struct sem {
    int semval;  /* значение семафора */
    int sempid;  /* PID последней операции */
};
Сегменты общей памяти¶
Сегмент
    общей
    памяти
    уникально
    идентифицируется
    положительным
    целым (shmid) и
    имеет
    связанную
    структуру
    данных struct shmid_ds,
    определённую
    в <sys/shm.h> и
    содержащую
    следующие
    поля:
  
struct shmid_ds {
    struct ipc_perm shm_perm;
    size_t          shm_segsz;   /* размер сегмента */
    pid_t           shm_cpid;    /* PID создателя */
    pid_t           shm_lpid;    /* PID последней операции */
    shmatt_t        shm_nattch;  /* число текущих подключений */
    time_t          shm_atime;   /* время последнего подключения */
    time_t          shm_dtime;   /* время последнего отключения */
    time_t          shm_ctime;   /* время последнего изменения */
};
- shm_perm
- Структура ipc_perm, описывающая права доступа к сегменту общей памяти.
- shm_segsz
- Размер в байтах сегмента общей памяти.
- shm_cpid
- ID процесса, создавшего сегмент общей памяти.
- shm_lpid
- ID последнего процесса, выполнившего системный вызов shmat(2) или shmdt(2).
- shm_nattch
- Количество текущих подключений для данного сегмента общей памяти.
- shm_atime
- Время последнего системного вызова shmat(2).
- shm_dtime
- Время последнего системного вызова shmdt(2).
- shm_ctime
- Время последнего системного вызова shmctl(2), изменившего shmid_ds.
СМОТРИТЕ ТАКЖЕ¶
ipc(2), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3)
| 2012-05-31 | Linux |