shm_open   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (3)
Updated: 25 avril 2005
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
shm_open, shm_unlink - Créer/ouvrir et supprimer des objets de mémoire partagés POSIX  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#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);  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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 fixés à partir des ID effectifs correspondant 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ée 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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Lors d'un échec, errno indique la cause de l'erreur. Les codes possibles dans errno sont les suivants :
EACCES
Interdicton 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 dans le 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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Ces fonctions sont fournies depuis la glibc 2.2.  



CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
POSIX.1-2001.

POSIX.1-2001 dit 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 du système ».  




NOTES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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.  




VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
close(2), fchmod(2), fchown(2), fcntl(2), fstat(2), ftruncate(2), mmap(2), open(2), umask(2)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 6 juin 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.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
VERSIONS
CONFORMITÉ
NOTES
VOIR AUSSI
TRADUCTION

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EACCESERREURS
EEXISTERREURS
EINVALERREURS
EMFILEERREURS
ENAMETOOLONGERREURS
ENFILEERREURS
ENOENTERREURS
O_CREATDESCRIPTION
O_EXCLDESCRIPTION
O_RDONLYDESCRIPTION
O_RDWRDESCRIPTION
O_TRUNCDESCRIPTION



Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:49:30, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional