Linux |
CentOS 4.8 |
|
ipc(5) |
ipc − Mécanisme Système V de communication entre processus. |
# 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 Système 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 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 <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 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è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 : |
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 é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 contient 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 permissions 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 système msgsnd. |
|
msg_lrpid |
PID du processus qui a effectué le dernier appel système msgrcv. |
|
msg_stime |
heure du dernier appel système msgsnd. |
|
msg_rtime |
heure du dernier appel système msgcv. |
|
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 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 contient 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 permissions 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 sémaphore 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 opération */ 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 */ ushort shm_cpid; /* PID créateur segment */ ushort shm_lpid; /* PID dernière opération */ 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 dernière modification */ |
shm_perm |
est la 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 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. |
ftok(3), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmget(2), shmdt (2). |
Christophe Blaess, 1997. |
ipc(5) |