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

NOM

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

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 System V 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 Linux 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

       En cas de succès, un identifiant de mémoire partagée valide est renvoyé. En cas d'erreur, -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

       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.

       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. Depuis Linux 2.2, cette limite vaut
              par défaut :

                  SHMMAX / PAGE_SIZE * (SHMMNI / 16)

              Pour une page de mémoire de  4 ko,  cette  formule  produit  (depuis  Linux 2.4)  la  valeur  2^20
              (2 097 152).

              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é. Depuis Linux 2.2, cette limite vaut par défaut
              0x2000000 (32 Mo).

              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. Avec Linux 2.2, cette limite valait
              128 par défaut. Depuis Linux 2.4, cette valeur par défaut vaut 4096.

              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.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> ».