Provided by:
manpages-fr_1.67.0-1_all 
NOM
shm_open, shm_unlink - Créer/ouvrir et supprimer des objets de mémoire
partagés POSIX.
SYNOPSIS
#include <sys/types.h>
#include <sys/mman.h>
int shm_open(const char *nom, int oflag, mode_t mode);
int shm_unlink(const char *nom);
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édement 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 un slash (/) et ne
pas en contenir d’autres.
oflag est un masque de bit associant l’une des deux constantes O_RDONLY
ou O_RWDR 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 fixés
comme avec l’appel open(2), et les bits de permission sont fixés
en fonction des 9 bits de poids faible de mode, hormis les bits
qui sont fixé 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).
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.
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 renvoir 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 shm_open refusé 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.
EACCES Interdicton d’utiliser shm_unlink sur l’objet de mémoire
partagée.
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 dans le shm_open était invalide.
EMFILE Le provessus 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 non qui n’existe pas, sans
attribut O_CREAT.
ENOENT Tentative d’utiliser shm_unlink sur un nom qui n’existe pas.
NOTES
Ces fonctions sont fournies depuis la GlibC 2.2. Les programmes qui les
invoquent doivent fournir l’argument -lrt lors de la compilation avec
cc afin d’avoir l’édition des liens avec la bibliothèque nécessaire
(temps-réel).
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 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.
CONFORMITÉ
POSIX 1003.1 (2001).
VOIR AUSSI
mmap(2), open(2), close(2), ftruncate(2), fstat(2), fchown(2),
fchmod(2), umask(2), fcntl(2)
TRADUCTION
Christophe Blaess, 2003.