NOM
svipc - Mécanismes System V de communication entre processus
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>
Cette page de manuel documente l’implémentation sous Linux des
mécanismes System V de communication entre processus (IPC :
« InterProcess Communication ») : les files de messages, les ensembles
de sémaphores, et les segments de mémoire partagée. Par la suite, le
mot ressource se rapportera à 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, définie dans le fichier d’en-têtes système
<sys/ipc.h> 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 l/e */
};
Le membre mode de la structure ipc_perm définit, sur ses 9 bits de
poids faibles, les permissions d’accès à la ressource, pour un
processus effectuant un appel système IPC. Les permissions sont
interprétées ainsi (nombres en octal) :
0400 Lecture par le propriétaire.
0200 Écriture par le propriétaire.
0040 Lecture par le groupe.
0020 Écriture par le groupe.
0004 Lecture par les autres.
0002 Écriture par les autres.
Les bits 0100, 0010 et 0001 (bits exécution) ne sont pas utilisés par
ces appels système. De plus, « écriture » a la signification
« 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 éventuellement une erreur, mais ne pas
attendre.
IPC_PRIVATE Clé privée.
IPC_RMID Supprimer la ressource.
IPC_SET Positionner une option 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 message est définie de manière unique par un entier positif
(son msqid) et dispose d’une structure 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 messages dans la file */
msglen_t msg_qbytes; /* octets maxi 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.
msg_qbytes Nombre maximal d’octets pour le contenu d’un message de la
file.
msg_lspid PID du processus qui a effectué le dernier appel système
msgsnd(2).
msg_lrpid PID 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 de manière unique par un entier
positif (son semid) et dispose d’une structure 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 dans le jeu */
};
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 nombre positif ou nul 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 de la dernière opération */
};
semval Valeur du sémaphore : entier positif ou nul.
sempid PID du dernier processus ayant effectué une opération sur le
sémaphore.
Segments de mémoire partagée.
Un segment de mémoire partagée est défini de manière unique par un
entier positif (son shmid) et dispose d’une structure 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 segment */
pid_t shm_cpid; /* PID du créateur */
pid_t shm_lpid; /* PID, dernière opération */
shmatt_t shm_nattch; /* nombre d’attachements */
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.
shm_cpid PID du processus ayant créé le segment.
shm_lpid PID du processus ayant effectué le dernier appel système
shmat(2) ou shmdt(2).
shm_nattch Nombre d’attachements en cours pour ce segment.
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é la
structure shmid_ds.
VOIR AUSSI
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)
COLOPHON
Cette page fait partie de la publication 3.23 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent être trouvées à l’adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION
Cette page de manuel a été traduite et mise à jour par Christophe
Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
francophone de traduction de Debian.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande « man -L C <section> <page_de_man> ».