IPC(5)

NOM
ipc - Mecanisme Systeme 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'implementation sous Linux des mecanismes Systeme V de communication entre processus : les files de messages, les ensembles de semaphores, et les segments de memoire partagee. Par la suite, le mot ressource se rapportera a l'un de ces mecanismes.

  Autorisations d'acces aux ressources.
Pour chaque ressource, le systeme utilise une structure commune, de type struct ipc_perm, pour enregistrer les informations permettant de determiner les autorisations concernant les operations ipc. la structure ipc_perm definie dans le fichier <sys/ipc.h> inclut les membres suivants :

    ushort cuid;   /* UID du createur     */
    ushort cgid;   /* GID du createur     */
    ushort uid;    /* UID du proprietaire */
    ushort gid;    /* GID du proprietaire */
    ushort mode;   /* Autorisations r/w   */

Le membre mode de la structure ipc_perm definit, sur ses 9 bits de poids faibles, les permissions d'acces a la ressource, pour un processus effectuant un appel systeme ipc. Les permission sont interpretees ainsi (nombres en octal) :

	0400	Lecture par le proprietaire.
	0200	Ecriture par le proprietaire.

	0040	Lecture par le groupe.
	0020	Ecriture par le groupe.

	0004	Lecture par les autres.
	0002	Ecriture par les autres.

Les bits 0100, 0010 et 0001 (bits execution) ne sont pas utilises par ces appels systemes. De plus, "ecriture" a la signification "modification" pour un ensemble de semaphores.

Le meme fichier d'en-tete definit egalement les constantes symboliques suivantes :

IPC_CREAT
    Creer une entree si la cle n'existe pas.

IPC_EXCL
    Echouer si la cle existe.

IPC_NOWAIT
    Retourner une erreur eventuellement, mais ne pas attendre.

IPC_PRIVATE
    Cle privee.

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 definie par un entier positif unique (son msqid) et dispose d'une structure associee de type struct msquid_ds, definie 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 derniere modification */

msg_perm
    est la structure ipc_perm qui indique les permissions d'acces 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 effectue le dernier appel systeme msgsnd.

msg_lrpid
    PID du processus qui a effectue le dernier appel systeme msgrcv.

msg_stime
    heure du dernier appel systeme msgsnd.

msg_rtime
    heure du dernier appel systeme msgcv.

msg_ctime
    heure du dernier appel systeme qui a modifie un membre de la structure msqid_ds.

  Jeux de semaphores.
Un ensemble de semaphore est defini par un entier positif unique (son semid) et dispose d'une structure associee de type struct semid_ds, definie dans <sys/sem.h>, qui contient les membres suivants :

  struct ipc_perm sem_perm;
  time_t sem_otime;  /* heure derniere operation    */
  time_t sem_ctime;  /* heure derniere modification */
  ushort sem_nsems;  /* nb semaphores dans le jeu   */

sem_perm
    est la structure ipc_perm qui indique les permissions d'acces sur l'ensemble de semaphores.

sem_otime
    Heure du dernier appel systeme semop.

sem_ctime
    Heure du dernier appel systeme semctl, qui a modifie un membre de la structure ci-dessus ou l'etat d'un semaphore de l'ensemble.

sem_nsems
    Nombre de semaphores dans l'ensemble. Chaque semaphore est reference par un nombre positif ou nul dans l'intervalle 0 a sem_nsems-1.

Un semaphore est une structure struct sem contenant les membres suivants :

ushort semval;  /* valeur du semaphore                  */
ushort sempid;  /* PID derniere operation               */
ushort semncnt; /* Nb proc. en attente increment semval */
ushort semzcnt; /* Nb proc. en attente de semval = 0    */

semval
    Valeur du semaphore : entier positif ou nul.

sempid
    PID du dernier processus ayant effectue une operation sur le semaphore.

semncnt
    Nombre de processus bloques en attente de l'incrementation de semval.

semznt
    Nombre de processus bloques en attente de la nullite de semval.

  Segments de memoire partagee.
Un segment de memoire partagee est defini par un entier positif unique (son shmid) et dispose d'une structure associee de type struct shmid_ds, definie dans <sys/shm.h>, qui contient les membres suivants :

    struct ipc_perm shm_perm;
    int    shm_segsz;  /* taille segment              */
    ushort shm_cpid;   /* PID createur segment        */
    ushort shm_lpid;   /* PID derniere operation      */
    short  shm_nattch; /* Nombre d'attachements       */
    time_t shm_atime;  /* Heure dernier attachement   */
    time_t shm_dtime;  /* Heure dernier detachement   */
    time_t shm_ctime;  /* Heure derniere modification */

shm_perm
    est la structure ipc_perm qui indique les permissions d'acces sur le segment de memoire partagee.

shm_segsz
    Taille en octets du segment.

shm_cpid
    PID du processus ayant cree le segment.

shm_lpid
    PID du processus ayant effectue le dernier appel systeme shmat ou shmdt.

shm_nattch
    Nombre d'attachements en cours pour ce segment.

shm_atime
    Heure du dernier appel systeme shmat.

shm_dtime
    Heure du dernier appel systeme shmdt.

shm_ctime
    Heure du dernier appel systeme shmctl qui a modifie 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).