IPC(5)           Manuel de l'administrateur Linux          IPC(5)


NOM
       ipc  -  Mécanisme Système V de communication entre proces­
       sus.

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 Systeme 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 mecanismes.

   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 permission sont interprétées ainsi  (nombres  en
       octal) :

            0400 Lecture par le propriétaire.
            0200 Ecriture par le proprtétaire.
            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 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 :




Linux                    18 Octobre 1996                        1





IPC(5)           Manuel de l'administrateur Linux          IPC(5)


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

       IPC_EXCL      Echouer 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 con­
       tient 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  per­
                  missions 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 systeme msgsnd.

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

       msg_stime  heure du dernier appel systeme msgsnd.

       msg_rtime  heure du dernier appel systeme msgcv.



Linux                    18 Octobre 1996                        2





IPC(5)           Manuel de l'administrateur Linux          IPC(5)


       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émaphore 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  con­
       tient 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 per­
                  missions 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
                  semaphore 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 operation               */
       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              */



Linux                    18 Octobre 1996                        3





IPC(5)           Manuel de l'administrateur Linux          IPC(5)


           ushort shm_cpid;   /* PID créateur segment        */
           ushort shm_lpid;   /* PID dernière operation      */
           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 derniere modification */

       shm_perm   est la structure ipc_perm qui indique les  per­
                  missions  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), sem­
       ctl(2),   semget(2),   semop(2),   shmat(2),    shmctl(2),
       shmget(2), shmdt (2).


TRADUCTION
       Christophe Blaess, 1997.






















Linux                    18 Octobre 1996                        4