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

NOM

       shmget - Allouer un segment de memoire partagee

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 memoire partagee associe a
       la valeur de l'argument key. Un nouveau segment memoire, de taille size
       arrondie  au  multiple  superieur  de  PAGE_SIZE,  est cree si key a la
       valeur IPC_PRIVATE ou  si  aucun  segment  de  memoire  partagee  n'est
       associe a key, et IPC_CREAT est present dans shmflg.

       Si shmflg contient a la fois les attributs IPC_CREAT et IPC_EXCL, et si
       un segment de memoire partagee est deja associe a key, shmget()  echoue
       avec  le  code  d'erreur  EEXIST. Ceci est similaire au comportement de
       open(2) avec la combinaison O_CREAT | O_EXCL.

       shmflg est compose de :

       IPC_CREAT   Creer un  nouveau  segment.  Sinon  shmget()  recherche  le
                   segment  associe  a  key  et  verifie  que  l'appelant a la
                   permission d'y acceder.

       IPC_EXCL    Utilise avec IPC_CREAT pour garantir l'echec si le  segment
                   existe deja.

       mode d'acc`es
                   (les   9   bits  de  poids  faibles)  Permissions  pour  le
                   proprietaire, le groupe et les autres. Ces bits ont le meme
                   format  et  la  meme  signification  que l'argument mode de
                   open(2). Actuellement la permission d'execution  n'est  pas
                   utilisee par le systeme.

       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 meme objet que l'attribut MAP_NORESERVE
                   de mmap(2). Ne  pas  reserver  d'espace  de  swap  pour  ce
                   segment.  Lorsque  de  l'espace  en  swap  est  reserve, le
                   systeme  garantit  qu'il  sera  possible  de  modifier   le
                   segment.  Lorsque  l'espace  en  swap n'est pas reserve, on
                   peut recevoir SIGSEGV lors d'une  ecriture  si  la  memoire
                   physique  est  pleine.  Consultez  aussi  la  discussion du
                   fichier /proc/sys/vm/overcommit_memory dans proc(5).

       Si un  nouveau  segment  de  memoire  partagee  est  cree,  le  systeme
       initialise  son  contenu  a  zero,  et la structure shmid_ds (consultez
       shmctl(2)) associee 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 a 0.

              shm_ctime contient l'heure actuelle.

       Si  le  segment  de  memoire  existe deja, les permissions d'acces sont
       verifiees, et un controle  a  lieu  pour  voir  s'il  est  marque  pour
       destruction.

VALEUR RENVOY'EE

       Un  identifiant de segment shmid valide est renvoye en cas de reussite,
       sinon -1 est renvoye 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'acces au segment, et  n'a
              pas la capacite CAP_IPC_OWNER.

       EEXIST shmflg  contient  IPC_CREAT  |  IPC_EXCL  mais le segment existe
              deja.

       EINVAL Un nouveau segment devait etre cree et size < SHMMIN ou  size  >
              SHMMAX,  ou bien un segment associe a key existe, mais sa taille
              est inferieure a size.

       ENFILE La limite du nombre total de fichiers ouverts sur le  systeme  a
              ete atteinte.

       ENOENT Aucun  segment  n'est  associe  a  key, et IPC_CREAT n'etait pas
              indique.

       ENOMEM Pas assez de memoire pour allouer le segment.

       ENOSPC Tous  les  identifiants  de  memoire  partagee   sont   utilises
              (SHMMNI),  ou  l'allocation  d'un segment partage de taille size
              depasserait les limites de memoire partagee du systeme (SHMALL).

       EPERM  L'attribut SHM_HUGETLB est indique, mais  l'appelant  n'est  pas
              privilegie (ne possede pas la capacite CAP_IPC_LOCK).

CONFORMIT'E

       SVr4, POSIX.1-2001.

       SHM_HUGETLB est specifique a Linux.

NOTES

       IPC_PRIVATE  n'est  pas  une  option  mais une valeur de type key_t. Si
       cette valeur speciale est utilisee comme cle,  l'appel  systeme  ignore
       tout  sauf  les  9 bits de poids faibles de shmflg et tente de creer un
       nouveau segment.

       Les limites suivantes influent sur l'appel systeme shmget :

       SHMALL Nombre maximal de pages de memoire partagee sur le systeme (sous
              Linux,  cette  limite peut etre lue et modifiee grace au fichier
              /proc/sys/kernel/shmall).

       SHMMAX Taille maximale, en octets, d'un segment  partage  (sous  Linux,
              cette  limite  peut  etre  lue  et  modifiee  grace  au  fichier
              /proc/sys/kernel/shmmax).

       SHMMIN Taille minimale, en octets, d'un  segment  partage :  depend  de
              l'implementation  (actuellement 1 octet, bien que PAGE_SIZE soit
              la valeur effectivement utilisee).

       SHMMNI Nombre maximal de segments de memoire partagee  sur  le  systeme
              (actuellement  4096,  mais  128 avant Linux 2.3.99 ; sous Linux,
              cette  limite  peut  etre  lue  et  modifiee  grace  au  fichier
              /proc/sys/kernel/shmmni).

       L'implementation n'a pas de limite specifique pour le nombre maximal de
       segments partages par processus (SHMSEG).

   Notes sur Linux
       Jusqu'au noyau 2.3.30, Linux renvoyait l'erreur EIDRM pour un  shmget()
       sur un segment de memoire marque pour destruction.

BOGUES

       Le choix du nom IPC_PRIVATE est malheureux, IPC_NEW aurait mieux decrit
       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.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> >>.