Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

       shmctl - Contrôler la mémoire partagée

SYNOPSIS

       #include <sys/ipc.h>
       #include <sys/shm.h>

       int shmctl(int shmid, int cmd, struct shmid_ds *buf);

DESCRIPTION

       shmctl()  effectue  l'opération  de  contrôle  indiquée  par cmd sur le segment de mémoire
       partagée identifié par shmid.

       L'argument buf est un pointeur sur une structure shmid_ds, définie dans <sys/shm.h>  comme
       suit :

           struct shmid_ds {
               struct ipc_perm shm_perm;   /* Propriétaire et permissions   */
               size_t          shm_segsz;  /* Taille segment en octets      */
               time_t          shm_atime;  /* Heure dernier attachement     */
               time_t          shm_dtime;  /* Heure dernier détachement     */
               time_t          shm_ctime;  /* Heure dernier changement      */
               pid_t           shm_cpid;   /* PID du créateur               */
               pid_t           shm_lpid;   /* PID du dernier shmat(2) /
                                              shmdt(2) */
               shmatt_t        shm_nattch; /* Nombre d'attachements actuels */
               ...
           };

       La  structure  ipc_perm  est  définie dans <sys/ipc.h> de la façon suivante (les champs en
       gras peuvent être modifiés en utilisant IPC_SET) :

           struct ipc_perm {
               key_t          __key;    /* Clé fournie à msgget(2) */
               uid_t          uid;      /* UID effectif du propriétaire */
               gid_t          gid;      /* GID effectif du propriétaire */
               uid_t          cuid;     /* UID effectif du créateur */
               gid_t          cgid;     /* GID effectif du créateur */
               unsigned short mode;     /* Permissions + attributs
                                           SHM_DEST et SHM_LOCKED */
               unsigned short __seq;    /* Numéro de séquence */
           };

       Les valeurs autorisées pour cmd sont :

       IPC_STAT  Copier dans la structure shmid_ds pointée par buf la  structure  de  données  du
                 noyau  concernant  shmid.  Le  processus  appelant  doit avoir des privilèges de
                 lecture sur le jeu de sémaphores

       IPC_SET   Écrire la valeur de certains champs de la structure  shmid_ds  pointée  par  buf
                 dans  la  structure  du  noyau  représentant  ce segment de mémoire partagée, en
                 mettant à jour le champ shm_ctime. Les champs suivants peuvent être mis à jour :
                 shm_perm.uid, shm_perm.gid et les 9 bits de poids faible de shm_perm.mode. L'UID
                 effectif  du  processus  appelant  doit  être   soit   celui   du   propriétaire
                 (shm_perm.uid)  soit  celui  du  créateur (shm_perm.cuid) du segment partagé, ou
                 bien l'appelant doit être privilégié.

       IPC_RMID  Marquer un segment comme prêt pour la destruction. Il sera détruit effectivement
                 après  le  dernier  détachement  (quand  le  membre  shm_nattch  de la structure
                 shmid_ds associée vaudra zéro). L'appelant doit être le créateur du segment, son
                 propriétaire, ou le superutilisateur. Si un segment est marqué pour destruction,
                 le drapeau (non standard) SHM_DEST sera levé dans le champ shm_perm.mode  de  la
                 structure de données associée récupérée par IPC_STAT.

       L'appelant  doit  s'assurer que le segment sera bien détruit. Autrement, les pages qui ont
       été allouées resteront indéfiniment en mémoire ou en swap.

       IPC_INFO (spécifique à Linux)
                 Fournir des informations sur les limites et paramètres du système concernant  la
                 mémoire  partagée dans la structure pointée par buf. Cette structure est de type
                 shminfo (ce qui nécessite un transtypage), qui est défini dans <sys/shm.h> si la
                 macro _GNU_SOURCE est définie :

                     struct  shminfo {
                         unsigned long shmmax; /* Taille maximum de segment */
                         unsigned long shmmin; /* Taille minimum de segment ;
                                                  toujours 1 */
                         unsigned long shmmni; /* Nombre maximal de segments */
                         unsigned long shmseg; /* Nombre maximal de segments qu'un
                                                  processus peut attacher ;
                                                  pas utilisé par le noyau */
                         unsigned long shmall; /* Nombre maximal de pages de
                                                  mémoire partagée sur le
                                                  système */
                     };

                 Les  paramètres  shmmni, shmmax et shmall peuvent être modifiés via les fichiers
                 du même nom dans /proc. Consultez proc(5) pour plus de détails.

       SHM_INFO (spécifique à Linux)
                 Fournir une structure shm_info contenant des  informations  sur  les  ressources
                 système  utilisées  par  des  segments  de mémoire partagée. Cette structure est
                 définie dans <sys/shm.h> si la macro _GNU_SOURCE est définie :

                     struct shm_info {
                         int           used_ids; /* Nombre de segments
                                                    actuellement existants */
                         unsigned long shm_tot;  /* Nombre total de pages de
                                                    mémoire partagée */
                         unsigned long shm_rss;  /* Nombre de pages de mémoire
                                                    partagée actuellement en RAM */
                         unsigned long shm_swp;  /* Nombre de pages de mémoire
                                                    partagée actuellement en swap */
                         unsigned long swap_attempts;
                                                 /* Non utilisé depuis Linux 2.4 */
                         unsigned long swap_successes;
                                                 /* Non utilisé depuis Linux 2.4 */
                     };

       SHM_STAT (spécifique à Linux)
                 Renvoie une structure shmid_ds comme pour IPC_STAT. Cependant, l'argument  shmid
                 n'est  pas  l'identifiant  d'un segment, mais un indice dans la table interne du
                 noyau qui contient les informations sur tous les segments de mémoire partagée du
                 système.

       L'appelant peut empêcher ou autoriser le noyau à évincer un segment de mémoire partagée en
       swap avec les valeurs suivantes de cmd :

       SHM_LOCK (spécifique à Linux)
                 Empêcher le segment d'être évincé en swap. L'appelant doit consulter chaque page
                 concernée  après  avoir effectué le verrouillage pour s'assurer qu'elle est bien
                 présente en mémoire. Si un segment est verrouillé,  le  drapeau  (non  standard)
                 SHM_LOCKED  sera  levé  dans  le champ shm_perm.mode de la structure de données,
                 récupérée avec IPC_STAT, associée au segment.

       SHM_UNLOCK (spécifique à Linux)
                 Déverrouiller le segment, ce qui autorise son swapping.

       Dans les noyaux antérieurs  à  2.6.10,  seul  un  processus  privilégié  pouvait  utiliser
       SHM_LOCK et SHM_UNLOCK. Depuis Linux 2.6.10, un processus non privilégié peut utiliser ces
       opérations si son UID effectif est celui du propriétaire ou du  créateur  du  segment,  et
       (pour SHM_LOCK) la quantité de mémoire à verrouiller ne dépasse pas la limite de ressource
       RLIMIT_MEMLOCK (consultez setrlimit(2)).

VALEUR RENVOYÉE

       Une opération IPC_INFO ou SHM_INFO réussie  renvoie  l'index  de  la  plus  grande  entrée
       utilisée dans le tableau interne du noyau contenant les informations sur tous les segments
       de mémoire partagée. Cette information peut être  utilisée  par  des  opérations  SHM_STAT
       répétées  pour  obtenir  les  informations  sur  tous  les segments de mémoire partagée du
       système. Une opération SHM_STAT  réussie  renvoie  l'identifiant  du  segment  de  mémoire
       partagée  dont l'indice était fourni par shmid. Les autres opérations renvoient 0 si elles
       réussissent.

       En cas d'erreur, la valeur de retour est -1, et errno contient le code d'erreur.

ERREURS

       EACCES L'opération demandée est IPC_STAT ou SHM_STAT, mais shm_perm.mode ne permet pas  la
              lecture   du   segment  shmid,  et  le  processus  appelant  n'a  pas  la  capacité
              CAP_IPC_OWNER.

       EFAULT cmd a la  valeur  IPC_SET  ou  IPC_STAT  mais  buf  pointe  en-dehors  de  l'espace
              d'adressage accessible.

       EIDRM  shmid pointe sur un segment détruit.

       EINVAL shmid  n'est pas un identifiant correct, ou cmd n'est pas une commande reconnue. Ou
              bien, pour l'opération SHM_STAT,  l'indice  indiqué  dans  shmid  correspond  à  un
              élément actuellement inutilisé de la table.

       ENOMEM (Depuis  le  noyau  2.6.9)  L'opération  SHM_LOCK  a  été demandée, et la taille du
              segment à verrouiller entraînerait un dépassement de  la  limite  du  nombre  total
              d'octets  de  mémoire  partagée  verrouillés pour l'UID réel du processus appelant.
              Cette  limite  est  la  limite  souple  de  ressource   RLIMIT_MEMLOCK   (consultez
              setrlimit(2)).

       EOVERFLOW
              L'opération  demandée  est  IPC_STAT mais la valeur de GID ou d'UID est trop grande
              pour être stockée dans la structure pointée par buf.

       EPERM  On réclame IPC_SET ou IPC_RMID mais l'appelant n'est  ni  le  créateur  du  segment
              (trouvé  dans  shm_perm.cuid),  ni le propriétaire (trouvé dans shm_perm.uid) et le
              processus n'est pas privilégié (sous Linux : n'a pas la capacité CAP_SYS_ADMIN.

              Ou bien (pour les noyaux antérieurs à 2.6.9) soit SHM_LOCK soit  SHM_UNLOCK  a  été
              spécifié,  mais le processus n'est pas privilégié (sous Linux : n'a pas la capacité
              CAP_IPC_LOCK. Depuis Linux 2.6.9, cette erreur peut également  se  produire  si  la
              limite RLIMIT_MEMLOCK est 0, et l'appelant n'est pas privilégié.

CONFORMITÉ

       SVr4, POSIX.1-2001.

NOTES

       Les opérations IPC_INFO, SHM_STAT et SHM_INFO sont utilisées par le programme ipcs(1) pour
       fournir des informations sur les ressources allouées. Ceci peut changer dans le futur,  en
       utilisant une interface sur le système de fichiers /proc.

       Linux autorise un processus à attacher (shmat(2)) un segment de mémoire partagée ayant été
       marqué pour suppression (avec shmctl(IPC_RMID). Cette particularité n'est  pas  disponible
       sur d'autres variantes d'UNIX ; des applications portables ne devraient pas compter sur ce
       comportement.

       Divers champs de la structure shmid_ds étaient de  type  short  sous  Linux  2.2  et  sont
       devenus  des long sous Linux 2.4. Pour en tirer parti, une recompilation sous glibc 2.1.91
       ou ultérieure doit suffire. (Le noyau distingue les anciens  et  nouveaux  appels  par  un
       drapeau IPC_64 dans cmd.)

VOIR AUSSI

       mlock(2), setrlimit(2), shmget(2), shmop(2), capabilities(7), svipc(7)

COLOPHON

       Cette  page  fait partie de la publication 3.32 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <URL:http://po4a.alioth.debian.org/> par l'équipe de traduction  francophone  au  sein  du
       projet perkamon <URL:http://perkamon.alioth.debian.org/>.

       Christophe   Blaess   <URL:http://www.blaess.fr/christophe/>   (1996-2003),  Alain  Portal
       <URL:http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et  l'équipe  francophone  de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>  ou  par  un  rapport  de  bogue   sur   le   paquet
       manpages-fr.

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».