IPC(5) Manuel de l'administrateur Linux IPC(5)
NOM
ipc - Mécanisme Système V de communication entre proces
sus.
SYNOPSIS
# include <sys/types.h>
# include <sys/ipc.h>
# 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 Systeme V de communication entre processus
: 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 mecanismes.
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 <sys/ipc.h> inclut les membres
suivants :
ushort cuid; /* UID du créateur */
ushort cgid; /* GID du créateur */
ushort uid; /* UID du propriétaire */
ushort gid; /* GID du propriétaire */
ushort mode; /* Autorisations r/w */
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 permission sont interprétées ainsi (nombres en
octal) :
0400 Lecture par le propriétaire.
0200 Ecriture par le proprtétaire.
0040 Lecture par le groupe.
0020 Ecriture par le groupe.
0004 Lecture par les autres.
0002 Ecriture par les autres.
Les bits 0100, 0010 et 0001 (bits exécution) ne sont pas
utilisés par ces appels systèmes. 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 :
Linux 18 Octobre 1996 1
IPC(5) Manuel de l'administrateur Linux IPC(5)
IPC_CREAT Créer une entrée si la clé n'existe pas.
IPC_EXCL Echouer si la clé existe.
IPC_NOWAIT Retourner une erreur éventuellement, 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 options que l'on
regroupe avec un OU binaire (|) dans une variable de type
int.
Files de messages.
Une file de message est définie par un entier positif
unique (son msqid) et dispose d'une structure associée de
type struct msquid_ds, définie dans <sys/msg.h>, qui con
tient les membres suivants :
struct ipc_perm msg_perm;
ushort msg_qnum; /* nb messages dans la file */
ushort msg_qbytes; /* octets maxi dans la file */
ushort msg_lspid; /* PID dernier appel msgsnd */
ushort msg_lrpid; /* PID dernier appel msgrcv */
time_t msg_stime; /* heure dernier appel msgsnd */
time_t msg_rtime; /* heure dernier appel msgrcv */
time_t msg_ctime; /* heure dernière modification */
msg_perm est la structure ipc_perm qui indique les per
missions d'accès sur la file de messages.
msg_qnum est le 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 systeme msgsnd.
msg_lrpid PID du processus qui a effectué le dernier
appel systeme msgrcv.
msg_stime heure du dernier appel systeme msgsnd.
msg_rtime heure du dernier appel systeme msgcv.
Linux 18 Octobre 1996 2
IPC(5) Manuel de l'administrateur Linux IPC(5)
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émaphore est défini par un entier positif
unique (son semid) et dispose d'une structure associée de
type struct semid_ds, définie dans <sys/sem.h>, qui con
tient les membres suivants :
struct ipc_perm sem_perm;
time_t sem_otime; /* heure dernière opération */
time_t sem_ctime; /* heure dernière modification */
ushort sem_nsems; /* nb sémaphores dans le jeu */
sem_perm est la structure ipc_perm qui indique les per
missions d'accès sur l'ensemble de sémaphores.
sem_otime Heure du dernier appel système semop.
sem_ctime Heure du dernier appel système semctl, 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
semaphore est référencé par un nombre positif
ou nul dans l'intervalle 0 a sem_nsems-1.
Un sémaphore est une structure struct sem contenant les
membres suivants :
ushort semval; /* Valeur du sémaphore */
ushort sempid; /* PID dernière operation */
ushort semncnt; /* Nb proc. en attente incrément semval */
ushort semzcnt; /* Nb proc. en attente de semval = 0 */
semval Valeur du sémaphore : entier positif ou nul.
sempid PID du dernier processus ayant effectué une
opération sur le sémaphore.
semncnt Nombre de processus bloqués en attente de
l'incrémentation de semval.
semznt Nombre de processus bloqués en attente de la
nullité de semval.
Segments de mémoire partagée.
Un segment de mémoire partagée est défini par un entier
positif unique (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 ipc_perm shm_perm;
int shm_segsz; /* taille segment */
Linux 18 Octobre 1996 3
IPC(5) Manuel de l'administrateur Linux IPC(5)
ushort shm_cpid; /* PID créateur segment */
ushort shm_lpid; /* PID dernière operation */
short 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 derniere modification */
shm_perm est la structure ipc_perm qui indique les per
missions 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 ou shmdt.
shm_nattch Nombre d'attachements en cours pour ce segment.
shm_atime Heure du dernier appel système shmat.
shm_dtime Heure du dernier appel système shmdt.
shm_ctime Heure du dernier appel système shmctl qui a
modifié la structure shmid_ds.
VOIR AUSSI
ftok(3), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), sem
ctl(2), semget(2), semop(2), shmat(2), shmctl(2),
shmget(2), shmdt (2).
TRADUCTION
Christophe Blaess, 1997.
Linux 18 Octobre 1996 4