table of contents
SVIPC(7) | Manuel du programmeur Linux | SVIPC(7) |
NOM¶
svipc - Mécanismes System V de communication entre processus
SYNOPSIS¶
#include <sys/msg.h> #include <sys/sem.h> #include <sys/shm.h>
DESCRIPTION¶
Cette page de manuel documente l'implémentation sous Linux des mécanismes de communication interprocessus de System V (IPC : « InterProcess Communication ») : files de messages, ensembles de sémaphores et segments de mémoire partagée. Par la suite, le mot ressource se rapportera à une instanciation de l'un de ces mécanismes.
Autorisations d'accès aux ressources¶
Pour chaque ressource, le système utilise une structure commune, de type struct ipc_perm, pour enregistrer les informations permettant de déterminer les autorisations concernant les opérations IPC. La structure ipc_perm comporte les membres suivants :
struct ipc_perm {
uid_t cuid; /* UID du créateur */
gid_t cgid; /* GID du créateur */
uid_t uid; /* UID du propriétaire */
gid_t gid; /* GID du propriétaire */
unsigned short mode; /* autorisations lect/écriture */ };
Le membre mode de la structure ipc_perm définit, sur ses 9 bits de poids faible, les permissions d'accès à la ressource pour un processus effectuant un appel système IPC. Les permissions sont interprétées ainsi :
0400 lecture pour l’utilisateur
0200 écriture pour l’utilisateur
0040 lecture pour le groupe
0020 écriture pour le groupe
0004 lecture pour les autres
0002 écriture pour les autres
Les bits 0100, 0010 et 0001 (bits exécution) ne sont pas utilisés par le système. De plus, « écriture » signifie de fait « modification » pour un ensemble de sémaphores.
Le même fichier d'en-tête définit également les constantes symboliques suivantes :
- IPC_CREAT
- Créer une entrée si la clé n'existe pas.
- IPC_EXCL
- Échouer si la clé existe.
- IPC_NOWAIT
- Retourner une erreur si la requête doit attendre.
- IPC_PRIVATE
- Clé privée.
- IPC_RMID
- Supprimer la ressource.
- IPC_SET
- Positionner les options concernant la ressource.
- IPC_STAT
- Obtenir les options concernant la ressource.
Notez que IPC_PRIVATE est du type key_t alors que les autres constantes symboliques sont des champs d'indicateurs qui peuvent être regroupés avec un OU logique dans une variable de type int.
Files de messages¶
Une file de messages est définie uniquement par un entier positif (son msqid) et dispose d'une structure de données associée de type struct msqid_ds, définie dans <sys/msg.h>, qui contient les membres suivants :
struct msqid_ds {
struct ipc_perm msg_perm;
msgqnum_t msg_qnum; /* nb de messages dans la file */
msglen_t msg_qbytes; /* nb max d’octets dans la file */
pid_t msg_lspid; /* PID du dernier appel à msgsnd(2) */
pid_t msg_lrpid; /* PID du dernier appel à msgrcv(2) */
time_t msg_stime; /* heure du dernier appel à msgsnd(2) */
time_t msg_rtime; /* heure du dernier appel à msgrcv(2) */
time_t msg_ctime; /* heure de dernière modification */ };
- msg_perm
- Structure ipc_perm qui indique les permissions d'accès sur la file de messages.
- msg_qnum
- Nombre de messages actuellement dans la file de messages.
- msg_qbytes
- Nombre maximal d'octets de texte de message autorisés dans la file de messages.
- msg_lspid
- Identifiant du processus qui a effectué le dernier appel système msgsnd(2).
- msg_lrpid
- Identifiant du processus qui a effectué le dernier appel système msgrcv(2).
- msg_stime
- Heure du dernier appel système msgsnd(2).
- msg_rtime
- Heure du dernier appel système msgrcv(2).
- msg_ctime
- Heure du dernier appel système qui a modifié un membre de la structure msqid_ds.
Jeux de sémaphores¶
Un ensemble de sémaphores est défini uniquement par un entier positif (son semid) et dispose d'une structure de données associée de type struct semid_ds, définie dans <sys/sem.h>, qui contient les membres suivants :
-
struct semid_ds {
struct ipc_perm sem_perm;
time_t sem_otime; /* heure dernière opération */
time_t sem_ctime; /* heure dernière modification */
unsigned long sem_nsems; /* nb sémaphores de l’ensemble */ };
- sem_perm
- Structure ipc_perm qui indique les permissions d'accès sur l'ensemble de sémaphores.
- sem_otime
- Heure du dernier appel système semop(2).
- sem_ctime
- Heure du dernier appel système semctl(2) qui a modifié un membre de la structure ci-dessus ou l'état d'un sémaphore de l'ensemble.
- sem_nsems
- Nombre de sémaphores dans l'ensemble. Chaque sémaphore est référencé par un entier positif ou nul, compris dans l'intervalle 0 à sem_nsems-1.
Un sémaphore est une structure de données de type struct sem contenant les membres suivants :
struct sem {
int semval; /* valeur du sémaphore */
int sempid; /* PID du dernier processus modificateur */ };
Segments de mémoire partagée¶
Un segment de mémoire partagée est défini uniquement par un entier positif (son shmid) et dispose d'une structure de données associée de type struct shmid_ds, définie dans <sys/shm.h>, qui contient les membres suivants :
struct shmid_ds {
struct ipc_perm shm_perm;
size_t shm_segsz; /* taille du segment */
pid_t shm_cpid; /* PID du créateur */
pid_t shm_lpid; /* PID, dernière opération */
shmatt_t shm_nattch; /* nb d'attachements actuel */
time_t shm_atime; /* heure dernier attachement */
time_t shm_dtime; /* heure dernier détachement */
time_t shm_ctime; /* heure dernière modification */ };
- shm_perm
- Structure ipc_perm qui indique les permissions d'accès sur le segment de mémoire partagée.
- shm_segsz
- Taille en octets du segment de mémoire partagée.
- shm_cpid
- PID du processus ayant créé le segment de mémoire partagée.
- shm_lpid
- ID du processus ayant effectué le dernier appel système shmat(2) ou shmdt(2).
- shm_nattch
- Nombre d'attachements en cours pour ce segment de mémoire partagée.
- shm_atime
- Heure du dernier appel système shmat(2).
- shm_dtime
- Heure du dernier appel système shmdt(2).
- shm_ctime
- Heure du dernier appel système shmctl(2) qui a modifié shmid_ds.
Espaces de noms IPC¶
Pour en savoir plus sur les interactions entre les objets IPC Syste, V et les espaces de noms IPC, consultez namespaces(7).
VOIR AUSSI¶
ipcmk(1), ipcrm(1), ipcs(1), lsipc(1), ipc(2), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3), namespaces(7)
COLOPHON¶
Cette page fait partie de la publication 4.16 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>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com> et Frédéric Hantrais <fhantrais@gmail.com>
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 mars 2016 | Linux |