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

NOM

       shmget - Allouer un segment de mémoire partagée

SYNOPSIS

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

       int shmget(key_t key, size_t size, int shmflg);

DESCRIPTION

       shmget()  renvoie  l'identifiant  du  segment  de  mémoire partagée associé à la valeur de
       l'argument key. Un nouveau segment mémoire, de taille size arrondie au multiple  supérieur
       de  PAGE_SIZE,  est  créé  si  key  a la valeur IPC_PRIVATE ou si aucun segment de mémoire
       partagée n'est associé à key, et IPC_CREAT est présent dans shmflg.

       Si shmflg contient à la fois les attributs IPC_CREAT et IPC_EXCL,  et  si  un  segment  de
       mémoire  partagée  est  déjà  associé à key, shmget() échoue avec le code d'erreur EEXIST.
       Ceci est similaire au comportement de open(2) avec la combinaison O_CREAT | O_EXCL.

       shmflg est composé de :

       IPC_CREAT   Créer un nouveau segment. Sinon shmget() recherche le segment associé à key et
                   vérifie que l'appelant a la permission d'y accéder.

       IPC_EXCL    Utilisé avec IPC_CREAT pour garantir l'échec si le segment existe déjà.

       mode d'accès
                   (les  9  bits de poids faibles) Permissions pour le propriétaire, le groupe et
                   les autres. Ces  bits  ont  le  même  format  et  la  même  signification  que
                   l'argument  mode  de open(2). Actuellement la permission d'exécution n'est pas
                   utilisée par le système.

       SHM_HUGETLB (depuis Linux 2.6)
                   Allouer le segment en utilisant  des  pages  immenses.  Consultez  le  fichier
                   Documentation/vm/hugetlbpage.txt   dans   les   sources  du  noyau  pour  plus
                   d'informations.

       SHM_NORESERVE (depuis Linux 2.6.15)
                   Cet attribut a le même objet que l'attribut MAP_NORESERVE de mmap(2).  Ne  pas
                   réserver  d'espace  de  swap  pour ce segment. Lorsque de l'espace en swap est
                   réservé, le système garantit qu'il  sera  possible  de  modifier  le  segment.
                   Lorsque  l'espace  en  swap  n'est  pas réservé, on peut recevoir SIGSEGV lors
                   d'une  écriture  si  la  mémoire  physique  est  pleine.  Consultez  aussi  la
                   discussion du fichier /proc/sys/vm/overcommit_memory dans proc(5).

       Si  un  nouveau  segment de mémoire partagée est créé, le système initialise son contenu à
       zéro, et la structure shmid_ds (consultez shmctl(2)) associée au segment comme suit :

              shm_perm.cuid et shm_perm.uid contiennent l'UID effectif de l'appelant.

              shm_perm.cgid et shm_perm.gid contiennent le GID effectif de l'appelant.

              Les 9 bits de poids faibles de  shm_perm.mode  contiennent  les  9  bits  de  poids
              faibles de shmflg.

              shm_segsz prend la valeur size.

              shm_lpid, shm_nattch, shm_atime et shm_dtime sont mis à 0.

              shm_ctime contient l'heure actuelle.

       Si  le  segment  de  mémoire  existe  déjà,  les permissions d'accès sont vérifiées, et un
       contrôle a lieu pour voir s'il est marqué pour destruction.

VALEUR RENVOYÉE

       Un identifiant de segment shmid valide est renvoyé  en  cas  de  réussite,  sinon  -1  est
       renvoyé et errno contient le code d'erreur.

ERREURS

       En cas d'erreur, errno prend l'une des valeurs suivantes :

       EACCES L'appelant  n'a  pas  les  autorisations d'accès au segment, et n'a pas la capacité
              CAP_IPC_OWNER.

       EEXIST shmflg contient IPC_CREAT | IPC_EXCL mais le segment existe déjà.

       EINVAL Un nouveau segment devait être créé et size < SHMMIN ou size > SHMMAX, ou  bien  un
              segment associé à key existe, mais sa taille est inférieure à size.

       ENFILE La limite du nombre total de fichiers ouverts sur le système a été atteinte.

       ENOENT Aucun segment n'est associé à key, et IPC_CREAT n'était pas indiqué.

       ENOMEM Pas assez de mémoire pour allouer le segment.

       ENOSPC Tous  les  identifiants de mémoire partagée sont utilisés (SHMMNI), ou l'allocation
              d'un segment partagé de taille size dépasserait les limites de mémoire partagée  du
              système (SHMALL).

       EPERM  L'attribut  SHM_HUGETLB  est  indiqué,  mais  l'appelant  n'est  pas privilégié (ne
              possède pas la capacité CAP_IPC_LOCK).

CONFORMITÉ

       SVr4, POSIX.1-2001.

       SHM_HUGETLB est spécifique à Linux.

NOTES

       IPC_PRIVATE n'est pas une option mais une valeur de type key_t. Si cette  valeur  spéciale
       est  utilisée  comme  clé, l'appel système ignore tout sauf les 9 bits de poids faibles de
       shmflg et tente de créer un nouveau segment.

       Les limites suivantes influent sur l'appel système shmget :

       SHMALL Nombre maximal de pages de mémoire partagée  sur  le  système  (sous  Linux,  cette
              limite peut être lue et modifiée grâce au fichier /proc/sys/kernel/shmall).

       SHMMAX Taille  maximale,  en  octets,  d'un segment partagé (sous Linux, cette limite peut
              être lue et modifiée grâce au fichier /proc/sys/kernel/shmmax).

       SHMMIN Taille minimale, en octets,  d'un  segment  partagé :  dépend  de  l'implémentation
              (actuellement 1 octet, bien que PAGE_SIZE soit la valeur effectivement utilisée).

       SHMMNI Nombre  maximal  de segments de mémoire partagée sur le système (actuellement 4096,
              mais 128 avant Linux 2.3.99 ; sous Linux, cette limite peut être  lue  et  modifiée
              grâce au fichier /proc/sys/kernel/shmmni).

       L'implémentation  n'a pas de limite spécifique pour le nombre maximal de segments partagés
       par processus (SHMSEG).

   Notes sur Linux
       Jusqu'au noyau 2.3.30, Linux renvoyait l'erreur EIDRM pour un shmget() sur un  segment  de
       mémoire marqué pour destruction.

BOGUES

       Le choix du nom IPC_PRIVATE est malheureux, IPC_NEW aurait mieux décrit sa fonction.

VOIR AUSSI

       shmat(2), shmctl(2), shmdt(2), ftok(3), capabilities(7), shm_overview(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> ».