Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

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

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 System V
       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 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  ou le propriétaire du segment, ou le superutilisateur. Le
                 paramètre buf est ignoré.

                 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.

                 Consultez la description de /proc/sys/kernel/shm_rmid_forced dans proc(5).

       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

       L'inclusion  de  <sys/types.h>  et <sys/ipc.h> n'est pas nécessaire sous Linux et n'est exigée par aucune
       version de POSIX. Cependant, certaines implémentations anciennes nécessitent l'inclusion de ces  fichiers
       d'en-tête,  et  le  SVID documente aussi leur inclusion. Les applications ayant pour but d'être portables
       pourraient inclure ces fichiers d'en-tête.

       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.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

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

       Christophe      Blaess      <http://www.blaess.fr/christophe/>      (1996-2003),       Alain       Portal
       <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> ».

Linux                                            7 février 2014                                        SHMCTL(2)