Scroll to navigation

SHM_OPEN(3) Manuel du programmeur Linux SHM_OPEN(3)

NOM

shm_open, shm_unlink - Créer ou 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);

Éditer les liens avec -lrt.

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). 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 définis en fonction des 9 bits de poids faible de mode, hormis les bits qui sont définis dans le masque de création du processus (consultez 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 — elle peut être définie avec 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 (consultez 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.

The operation of shm_unlink() is analogous to unlink(2): it removes a shared memory object name, and, once all processes have unmapped the object, de-allocates and destroys the contents of the associated memory region. After a successful shm_unlink(), attempts to shm_open() an object with the same name fail (unless O_CREAT was specified, in which case a new, distinct object is created).

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
La limite du nombre de descripteurs de fichiers par processus a été atteinte.
ENAMETOOLONG
La longueur du nom dépasse PATH_MAX.
ENFILE
La limite du nombre total de fichiers ouverts pour le système entier 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.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface Attribut Valeur
shm_open(), shm_unlink() Sécurité des threads MT-Safe locale

CONFORMITÉ

POSIX.1-2001, POSIX.1-2008.

POSIX.1-2001 says that the group ownership of a newly created shared memory object is set to either the calling process's effective group ID or "a system default group ID". POSIX.1-2008 says that the group ownership may be set to either the calling process's effective group ID or, if the object is visible in the filesystem, the group ID of the parent directory.

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.

The POSIX shared memory object implementation on Linux makes use of a dedicated tmpfs(5) filesystem that is normally mounted under /dev/shm.

VOIR AUSSI

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

COLOPHON

Cette page fait partie de la publication 5.04 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à <debian-l10n-french@lists.debian.org>.

15 septembre 2017 Linux