Scroll to navigation

SVIPC(7) Manuel du programmeur Linux SVIPC(7)

NOM

sysvipc - 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 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 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 faible, 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    Read by user.
    0200    Write by user.
    0040    Read by group.
    0020    Write by group.
    0004    Read by others.
    0002    Write by others.

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 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 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;  /* semaphore value */
    int sempid;  /* PID of process that last modified */
};


semval
Valeur du sémaphore : entier positif ou nul.
sempid
PID of the last process that modified the value of this semaphore.

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.

Espaces de noms IPC

Pour en savoir plus sur les interactions entre les objets IPC Syste, V et les espaces de noms IPC, consultez ipc_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), ipc_namespaces(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>, 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.

10 octobre 2019 Linux