Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       shmctl - Controler la memoire partagee

SYNOPSIS

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

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

DESCRIPTION

       shmctl()  effectue  l'operation  de  controle  indiquee  par cmd sur le
       segment de memoire partagee identifie par shmid.

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

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

       La structure ipc_perm est definie dans <sys/ipc.h> de la facon suivante
       (les champs en gras peuvent etre modifies en utilisant IPC_SET) :

           struct ipc_perm {
               key_t          __key;    /* Cle fournie a msgget(2) */
               uid_t          uid;      /* UID effectif du proprietaire */
               gid_t          gid;      /* GID effectif du proprietaire */
               uid_t          cuid;     /* UID effectif du createur */
               gid_t          cgid;     /* GID effectif du createur */
               unsigned short mode;     /* Permissions + attributs
                                           SHM_DEST et SHM_LOCKED */
               unsigned short __seq;    /* Numero de sequence */
           };

       Les valeurs autorisees pour cmd sont :

       IPC_STAT  Copier  dans  la  structure  shmid_ds  pointee  par  buf   la
                 structure  de donnees du noyau concernant shmid. Le processus
                 appelant doit avoir des privileges de lecture sur le  jeu  de
                 semaphores

       IPC_SET   Ecrire  la valeur de certains champs de la structure shmid_ds
                 pointee par buf dans la structure du  noyau  representant  ce
                 segment  de  memoire  partagee,  en  mettant  a jour le champ
                 shm_ctime. Les champs suivants  peuvent  etre  mis  a  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 etre
                 soit  celui  du  proprietaire  (shm_perm.uid)  soit  celui du
                 createur  (shm_perm.cuid)  du  segment   partage,   ou   bien
                 l'appelant doit etre privilegie.

       IPC_RMID  Marquer  un  segment  comme pret pour la destruction. Il sera
                 detruit effectivement apres le dernier detachement (quand  le
                 membre  shm_nattch  de  la structure shmid_ds associee vaudra
                 zero). L'appelant doit  etre  le  createur  du  segment,  son
                 proprietaire,  ou  le  superutilisateur.  Si  un  segment est
                 marque pour destruction, le drapeau (non  standard)  SHM_DEST
                 sera  leve  dans  le  champ  shm_perm.mode de la structure de
                 donnees associee recuperee par IPC_STAT.

       L'appelant doit s'assurer que le segment sera bien detruit.  Autrement,
       les  pages qui ont ete allouees resteront indefiniment en memoire ou en
       swap.

       IPC_INFO (specifique a Linux)
                 Fournir des informations sur les  limites  et  parametres  du
                 systeme  concernant  la  memoire  partagee  dans la structure
                 pointee par buf. Cette structure est de type shminfo (ce  qui
                 necessite un transtypage), qui est defini dans <sys/shm.h> si
                 la macro _GNU_SOURCE est definie :

                     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 utilise par le noyau */
                         unsigned long shmall; /* Nombre maximal de pages de
                                                  memoire partagee sur le
                                                  systeme */
                     };

                 Les parametres shmmni, shmmax et shmall peuvent etre modifies
                 via  les  fichiers  du meme nom dans /proc. Consultez proc(5)
                 pour plus de details.

       SHM_INFO (specifique a Linux)
                 Fournir une structure shm_info contenant des informations sur
                 les  ressources systeme utilisees par des segments de memoire
                 partagee. Cette structure est definie dans <sys/shm.h> si  la
                 macro _GNU_SOURCE est definie :

                     struct shm_info {
                         int           used_ids; /* Nombre de segments
                                                    actuellement existants */
                         unsigned long shm_tot;  /* Nombre total de pages de
                                                    memoire partagee */
                         unsigned long shm_rss;  /* Nombre de pages de memoire
                                                    partagee actuellement en RAM */
                         unsigned long shm_swp;  /* Nombre de pages de memoire
                                                    partagee actuellement en swap */
                         unsigned long swap_attempts;
                                                 /* Non utilise depuis Linux 2.4 */
                         unsigned long swap_successes;
                                                 /* Non utilise depuis Linux 2.4 */
                     };

       SHM_STAT (specifique a 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  memoire
                 partagee du systeme.

       L'appelant  peut empecher ou autoriser le noyau a evincer un segment de
       memoire partagee en swap avec les valeurs suivantes de cmd :

       SHM_LOCK (specifique a Linux)
                 Empecher le segment d'etre evince en  swap.  L'appelant  doit
                 consulter  chaque  page  concernee  apres  avoir  effectue le
                 verrouillage pour s'assurer  qu'elle  est  bien  presente  en
                 memoire.  Si  un  segment  est  verrouille,  le  drapeau (non
                 standard) SHM_LOCKED sera leve dans le champ shm_perm.mode de
                 la structure de donnees, recuperee avec IPC_STAT, associee au
                 segment.

       SHM_UNLOCK (specifique a Linux)
                 Deverrouiller le segment, ce qui autorise son swapping.

       Dans les noyaux anterieurs  a  2.6.10,  seul  un  processus  privilegie
       pouvait  utiliser  SHM_LOCK  et  SHM_UNLOCK.  Depuis  Linux  2.6.10, un
       processus non privilegie  peut  utiliser  ces  operations  si  son  UID
       effectif  est celui du proprietaire ou du createur du segment, et (pour
       SHM_LOCK) la quantite de memoire a verrouiller ne depasse pas la limite
       de ressource RLIMIT_MEMLOCK (consultez setrlimit(2)).

VALEUR RENVOY'EE

       Une  operation  IPC_INFO ou SHM_INFO reussie renvoie l'index de la plus
       grande entree utilisee dans le tableau interne du noyau  contenant  les
       informations   sur   tous  les  segments  de  memoire  partagee.  Cette
       information peut etre utilisee par  des  operations  SHM_STAT  repetees
       pour obtenir les informations sur tous les segments de memoire partagee
       du systeme. Une operation SHM_STAT  reussie  renvoie  l'identifiant  du
       segment  de  memoire partagee dont l'indice etait fourni par shmid. Les
       autres operations renvoient 0 si elles reussissent.

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

ERREURS

       EACCES L'operation    demandee   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 capacite 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 detruit.

       EINVAL shmid n'est pas un identifiant correct, ou  cmd  n'est  pas  une
              commande  reconnue. Ou bien, pour l'operation SHM_STAT, l'indice
              indique  dans  shmid  correspond  a  un   element   actuellement
              inutilise de la table.

       ENOMEM (Depuis  le noyau 2.6.9) L'operation SHM_LOCK a ete demandee, et
              la taille du segment a verrouiller entrainerait  un  depassement
              de  la  limite  du  nombre  total  d'octets  de memoire partagee
              verrouilles pour l'UID reel du processus appelant. Cette  limite
              est  la  limite  souple  de  ressource RLIMIT_MEMLOCK (consultez
              setrlimit(2)).

       EOVERFLOW
              L'operation demandee est IPC_STAT mais la valeur de GID ou d'UID
              est  trop grande pour etre stockee dans la structure pointee par
              buf.

       EPERM  On reclame IPC_SET ou  IPC_RMID  mais  l'appelant  n'est  ni  le
              createur   du   segment   (trouve  dans  shm_perm.cuid),  ni  le
              proprietaire (trouve dans shm_perm.uid) et  le  processus  n'est
              pas privilegie (sous Linux : n'a pas la capacite CAP_SYS_ADMIN.

              Ou  bien (pour les noyaux anterieurs a 2.6.9) soit SHM_LOCK soit
              SHM_UNLOCK  a  ete  specifie,  mais  le  processus   n'est   pas
              privilegie  (sous  Linux :  n'a  pas  la  capacite CAP_IPC_LOCK.
              Depuis Linux 2.6.9, cette erreur peut egalement se  produire  si
              la   limite  RLIMIT_MEMLOCK  est  0,  et  l'appelant  n'est  pas
              privilegie.

CONFORMIT'E

       SVr4, POSIX.1-2001.

NOTES

       Les operations IPC_INFO, SHM_STAT et SHM_INFO  sont  utilisees  par  le
       programme  ipcs(1)  pour  fournir  des  informations sur les ressources
       allouees. Ceci peut changer dans le futur, en utilisant  une  interface
       sur le systeme de fichiers /proc.

       Linux autorise un processus a attacher (shmat(2)) un segment de memoire
       partagee ayant ete  marque  pour  suppression  (avec  shmctl(IPC_RMID).
       Cette   particularite  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 etaient 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 ulterieure 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.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   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'equipe francophone de traduction de Debian (2006-2009).

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

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.

Linux                             7 aout 2008                        SHMCTL(2)