Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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> >>.