Linux

CentOS 4.8

ipc(5)


IPC

NOM

ipc − Mécanisme Système V de communication entre processus.

SYNOPSIS

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

DESCRIPTION

Cette page de manuel documente l’implémentation sous Linux des mécanismes Système V de communication entre processus : les files de messages, les ensembles de sémaphores, et les segments de mémoire partagée. Par la suite, le mot ressource se rapportera à l’un de ces mécanismes.

Autorisations d’accès aux ressources.

Pour chaque ressource, le système utilise une structure commune, de type struct ipc_perm, pour enregistrer les informations permettant de déterminer les autorisations concernant les opérations ipc. la structure ipc_perm définie dans le fichier <sys/ipc.h> inclut les membres suivants :

    ushort cuid;   /* UID du créateur     */
    ushort cgid;   /* GID du créateur     */
    ushort uid;    /* UID du propriétaire */
    ushort gid;    /* GID du propriétaire */
    ushort mode;   /* Autorisations r/w   */

Le membre mode de la structure ipc_perm définit, sur ses 9 bits de poids faibles, les permissions d’accès à la ressource, pour un processus effectuant un appel système ipc. Les permissions sont interprétées ainsi (nombres en octal) :

0400

Lecture par le propriétaire.

0200

Ãcriture par le propriétaire.

0040

Lecture par le groupe.

0020

Ãcriture par le groupe.

0004

Lecture par les autres.

0002

Ãcriture par les autres.

Les bits 0100, 0010 et 0001 (bits exécution) ne sont pas utilisés par ces appels systèmes. De plus, "écriture" a la signification "modification" pour un ensemble de sémaphores.

Le même fichier d’en-tête définit également les constantes symboliques suivantes :

IPC_CREAT

Créer une entrée si la clé n’existe pas.

IPC_EXCL

Ãchouer si la clé existe.

IPC_NOWAIT

Retourner une erreur éventuellement, mais ne pas attendre.

IPC_PRIVATE

Clé privée.

IPC_RMID

Supprimer la ressource.

IPC_SET

Positionner une option concernant la ressource.

IPC_STAT

Obtenir les options concernant la ressource.

Notez que IPC_PRIVATE est du type key_t alors que les autres constantes symboliques sont des options que l’on regroupe avec un OU binaire (|) dans une variable de type int.

Files de messages.

Une file de message est définie par un entier positif unique (son msqid) et dispose d’une structure associée de type struct msquid_ds, définie dans <sys/msg.h>, qui contient les membres suivants :

  struct ipc_perm msg_perm;
  ushort msg_qnum;   /* nb messages dans la file    */
  ushort msg_qbytes; /* octets maxi dans la file    */
  ushort msg_lspid;  /* PID dernier appel msgsnd    */
  ushort msg_lrpid;  /* PID dernier appel msgrcv    */
  time_t msg_stime;  /* heure dernier appel msgsnd  */
  time_t msg_rtime;  /* heure dernier appel msgrcv  */
  time_t msg_ctime;  /* heure dernière modification */

msg_perm

est la structure ipc_perm qui indique les permissions d’accès sur la file de messages.

msg_qnum

est le nombre de messages actuellement dans la file.

msg_qbytes

Nombre maximal d’octets pour le contenu d’un message de la file.

msg_lspid

PID du processus qui a effectué le dernier appel système msgsnd.

msg_lrpid

PID du processus qui a effectué le dernier appel système msgrcv.

msg_stime

heure du dernier appel système msgsnd.

msg_rtime

heure du dernier appel système msgcv.

msg_ctime

heure du dernier appel système qui a modifié un membre de la structure msqid_ds.

Jeux de sémaphores.

Un ensemble de sémaphores est défini par un entier positif unique (son semid) et dispose d’une structure associée de type struct semid_ds, définie dans <sys/sem.h>, qui contient les membres suivants :

  struct ipc_perm sem_perm;
  time_t sem_otime;  /* heure dernière opération    */
  time_t sem_ctime;  /* heure dernière modification */
  ushort sem_nsems;  /* nb sémaphores dans le jeu   */

sem_perm

est la structure ipc_perm qui indique les permissions d’accès sur l’ensemble de sémaphores.

sem_otime

Heure du dernier appel système semop.

sem_ctime

Heure du dernier appel système semctl, qui a modifié un membre de la structure ci-dessus ou l’état d’un sémaphore de l’ensemble.

sem_nsems

Nombre de sémaphores dans l’ensemble. Chaque sémaphore est référencé par un nombre positif ou nul dans l’intervalle 0 a sem_nsems−1.

Un sémaphore est une structure struct sem contenant les membres suivants :

ushort semval;  /* Valeur du sémaphore                  */
ushort sempid;  /* PID dernière opération               */
ushort semncnt; /* Nb proc. en attente incrément semval */
ushort semzcnt; /* Nb proc. en attente de semval = 0    */

semval

Valeur du sémaphore : entier positif ou nul.

sempid

PID du dernier processus ayant effectué une opération sur le sémaphore.

semncnt

Nombre de processus bloqués en attente de l’incrémentation de semval.

semznt

Nombre de processus bloqués en attente de la nullité de semval.

Segments de mémoire partagée.

Un segment de mémoire partagée est défini par un entier positif unique (son shmid) et dispose d’une structure associée de type struct shmid_ds, définie dans <sys/shm.h>, qui contient les membres suivants :

    struct ipc_perm shm_perm;
    int    shm_segsz;  /* taille segment              */
    ushort shm_cpid;   /* PID créateur segment        */
    ushort shm_lpid;   /* PID dernière opération      */
    short  shm_nattch; /* Nombre d’attachements       */
    time_t shm_atime;  /* Heure dernier attachement   */
    time_t shm_dtime;  /* Heure dernier détachement   */
    time_t shm_ctime;  /* Heure dernière modification */

shm_perm

est la structure ipc_perm qui indique les permissions d’accès sur le segment de mémoire partagée.

shm_segsz

Taille en octets du segment.

shm_cpid

PID du processus ayant créé le segment.

shm_lpid

PID du processus ayant effectué le dernier appel système shmat ou shmdt.

shm_nattch

Nombre d’attachements en cours pour ce segment.

shm_atime

Heure du dernier appel système shmat.

shm_dtime

Heure du dernier appel système shmdt.

shm_ctime

Heure du dernier appel système shmctl qui a modifié la structure shmid_ds.

VOIR AUSSI

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

TRADUCTION

Christophe Blaess, 1997.


ipc(5)