SHM_OPEN
Section : Manuel du programmeur Linux (
3)
Mise à jour de la version anglaise : 25 avril 2008
Index
Menu principal
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 « mode » */
#include <fcntl.h> /* Pour les constantes O_* */
int shm_open(const char *nom, int oflag, mode_t mode);
int shm_unlink(const char *nom);
Utilisez
-lrt
à l'édition de liens.
DESCRIPTION
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).
On indique le
nom
d'un segment mémoire à créer ou ouvrir.
Pour un fonctionnement portable, le
nom
doit commencer par une barre oblique « / »
et ne pas en contenir d'autres.
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 sont définis
à partir des ID 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, 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 ces valeurs d'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 son 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 mémoire partagé
nouvellement créé est soit le GID effectif du processus appelant,
soit « un GID 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)
TRADUCTION
Ce document est une traduction réalisée par Christophe Blaess
<http://www.blaess.fr/christophe/> le 21 juillet 2003
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 3 shm_open ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- VERSIONS
-
- CONFORMITÉ
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008