Loading

NOM

       shm_open,  shm_unlink - Créer/ouvrir et supprimer des objets de mémoire
       partagés POSIX

SYNOPSIS

       #include <sys/mman.h>
       #include <sys/stat.h>        /* Pour les constantes des modes */
       #include <fcntl.h>           /* Pour les constantes O_* */

       int shm_open(const char *nom, int oflag, mode_t mode);

       int shm_unlink(const char *nom);

       Effectuez l’édition des liens avec l’option -lrt.

       La fonction shm_open() crée et ouvre un nouvel objet de mémoire partagé
       POSIX,   ou  ouvre  un  objet  existant.  Il  s’agit  d’un  descripteur
       utilisable par d’autres processus avec mmap(2) pour  projeter  la  même
       région   mémoire.   La   fonction   shm_unlink()   réalise  l’opération
       complémentaire en supprimant l’objet créé précédemment par  shm_open().

       Le  fonctionnement  de  shm_open() est analogue à celui de open(2). nom
       indique  l’objet  mémoire  partagé  à  créer   ou   ouvrir.   Pour   un
       fonctionnement  portable,  un objet mémoire partagé doit être identifié
       par un nom au format /un_nom ; c’est à dire une chaîne terminée par  un
       caractère   nul   d’au  plus  NAME_MAX  (c’est-à-dire  255)  caractère,
       commençant par une barre oblique (« / »), suivi d’un caractère ou plus,
       ces derniers n’étant pas des barres obliques.

       oflag est un masque de bit associant l’une des deux constantes O_RDONLY
       ou O_RDWR et un ou plusieurs des attributs décrits ci-après.

       O_RDONLY   Ouvrir l’objet en lecture seule. Un tel objet ne pourra être
                  projeté en mémoire avec mmap(2) qu’avec l’accès (PROT_READ).

       O_RDWR     Ouvrir l’objet en lecture et écriture.

       O_CREAT    Créer  l’objet  de  mémoire  partagée  s’il  n’existe   pas.
                  L’utilisateur   et   le   groupe  propriétaires  de  l’objet
                  proviennent des IDs effectifs du processus appelant, et  les
                  bits  de  permission  sont  fixés  en fonction des 9 bits de
                  poids faible de mode, hormis les bits qui sont fixés dans le
                  masque  de création du processus (voir umask(2)) et qui sont
                  effacés. Un jeu de constantes utilisables  pour  définir  le
                  mode est décrit dans open(2) (les définitions symboliques de
                  ces   constantes   peuvent   être   obtenues   en   incluant
                  <sys/stat.h>).

                  Un  nouvel  objet  de  mémoire partagé a une taille initiale
                  nulle - on la fixe en  utilisant  ftruncate(2).  Les  octets
                  d’un   objet   mémoire   partagé   nouvellement   créé  sont
                  automatiquement initialisés à zéro.

       O_EXCL     Si O_CREAT était précisé et si un objet de mémoire  partagée
                  avec  le  même  nom  existait  déjà, renvoyer une erreur. La
                  vérification et l’existence et la création  éventuelle  sont
                  réalisées de manière atomique.

       O_TRUNC    Si  l’objet de mémoire partagée existait, tronquer sa taille
                  à zéro.

       Les définitions des valeurs de ces attributs peuvent être  obtenues  en
       incluant <fcntl.h>.

       Si  elle réussit, la fonction shm_open() renvoie un nouveau descripteur
       décrivant l’objet de mémoire partagée. Le descripteur est assuré d’être
       le  plus  petit  numéro  disponible  dans  la table des descripteurs du
       processus. L’attribut FD_CLOEXEC (voir fcntl(2))  sera  activé  sur  le
       descripteur de fichier.

       Le  descripteur  est  utilisé  normalement pour les appels ultérieurs à
       ftruncate(2) (pour un objet nouvellement créé)  et  mmap(2).  Après  un
       appel  à  mmap(2)  le  descripteur  peut  être  fermé  sans affecter la
       projection mémoire.

       Le fonctionnement de shm_unlink() est analogue à celui  de  unlink(2) :
       il  supprime  le  nom  d’un objet de mémoire partagée, et, une fois que
       tous les processus ont supprimé leur projection en mémoire,  libère  et
       détruit  le  contenu  de la portion de mémoire. Après un appel réussi à
       shm_unlink(), les tentatives d’appeler  shm_open()  avec  le  même  nom
       échoueront  (sauf  si  O_CREAT est spécifié, auquel cas un nouvel objet
       distinc est créé).

VALEUR RENVOYÉE

       S’il réussit, l’appel shm_open() renvoie un descripteur de fichier  non
       négatif.  S’il  échoue,  shm_open()  renvoie -1. shm_unlink() renvoie 0
       s’il réussit ou -1 en cas d’erreur.

ERREURS

       Lors d’un  échec,  errno  indique  la  cause  de  l’erreur.  Les  codes
       possibles dans errno sont les suivants :

       EACCES Interdiction  d’utiliser  shm_unlink()  sur  l’objet  de mémoire
              partagée.

       EACCES shm_open() refusée pour le nom dans le mode indiqué, ou  O_TRUNC
              a  été  réclamé et l’appelant n’a pas les permissions d’écriture
              sur l’objet.

       EEXIST O_CREAT et O_EXCL étaient réclamés dans shm_open() et  un  objet
              de mémoire partagée du même nom existait déjà.

       EINVAL L’argument nom de shm_open() était invalide.

       EMFILE Le processus a déjà ouvert le nombre maximal de fichiers.

       ENAMETOOLONG
              La longueur du nom dépasse PATH_MAX.

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

       ENOENT Tentative d’ouvrir avec shm_open() un nom qui n’existe pas, sans
              attribut O_CREAT.

       ENOENT Tentative d’utiliser shm_unlink() sur un nom qui n’existe pas.

VERSIONS

       Ces fonctions sont fournies depuis la glibc 2.2.

CONFORMITÉ

       POSIX.1-2001.

       POSIX.1-2001 indique que le groupe propriétaire d’un objet nouvellement
       créé utilise soit l’ID de groupe du processus appelant, soit un « ID de
       groupe par défaut défini par le système ».

NOTES

       POSIX  ne  précise  pas  le  comportement de la combinaison O_RDONLY et
       O_TRUNC.  Sous  Linux,  la  troncature  aura  lieu  -  cela  n’est  pas
       nécessairement le cas sous d’autres systèmes Unix.

       L’implémentation  sous  Linux  2.4 des objets de mémoire partagée POSIX
       utilise un système de fichiers dédiés, monté en principe sous /dev/shm.

VOIR AUSSI

       close(2),   fchmod(2),  fchown(2),  fcntl(2),  fstat(2),  ftruncate(2),
       mmap(2), open(2), umask(2), shm_overview(7)

COLOPHON

       Cette page fait partie de  la  publication  3.23  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

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement         gérées         par         Nicolas         François
       <nicolas.francois@centraliens.net>   et   l’équipe    francophone    de
       traduction de Debian.

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