msgctl(2) | System Calls Manual | msgctl(2) |
msgctl - Contrôler les messages System V
Bibliothèque C standard (libc, -lc)
#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
Cette fonction permet d'effectuer l'opération indiquée par cmd sur la file de messages System V ayant l'identifiant msqid.
La structure msqid_ds est déclarée dans <sys/msg.h> comme suit :
struct msqid_ds {
struct ipc_perm msg_perm; /* Propriétaire et droits */
time_t msg_stime; /* Heure du dernier msgsnd(2) */
time_t msg_rtime; /* Heure du dernier msgrcv(2) */
time_t msg_ctime; /* Heure de création ou de
modification avec msgctl() */
unsigned long msg_cbytes; /* nombre d'octets dans la file */
msgqnum_t msg_qnum; /* nombre de messages dans la file */
msglen_t msg_qbytes; /* nombre maximal d'octets dans la file */
pid_t msg_lspid; /* PID du dernier msgsnd(2) */
pid_t msg_lrpid; /* PID du dernier msgrcv(2) */ };
Les champs de la structure msqid_ds sont les suivants :
La structure ipc_perm est définie de la façon suivante (les champs en gras peuvent être modifiés en utilisant IPC_SET) :
struct ipc_perm {
key_t __key; /* Clé fournie à msgget(2) */
uid_t uid; /* UID effectif du propriétaire */
gid_t gid; /* GID effectif du propriétaire */
uid_t cuid; /* UID effectif du créateur */
gid_t cgid; /* GID effectif du créateur */
unsigned short mode; /* Permissions */
unsigned short __seq; /* Numéro de séquence */ };
Les neuf bits de poids faible du champ mode de la structure ipc_perm définissent les droits d'accès à la file de messages. Les bits de droits sont les suivants :
0400 | Lisible par l'utilisateur |
0200 | Droit d'écriture pour l'utilisateur |
0040 | Lisible par le groupe |
0020 | Autorisation d'écriture pour le groupe |
0004 | Lisible par les autres |
0002 | Écrit par d'autres |
Les bits 0100, 0010 et 0001 (les bits d'exécution) sont inusités par le système.
Les valeurs autorisées pour cmd sont :
struct msginfo {
int msgpool; /* Taille en kibioctets du tampon utilisé
pour stocker les données des messages.
Non utilisé par le noyau */
int msgmap; /* Nombre maximal d'entrées dans la table
des messages. Non utilisé par le noyau */
int msgmax; /* Nombre maximal d'octets pouvant être
écrits dans un seul message */
int msgmnb; /* Nombre maximal d'octets pouvant être
écrits dans une file. Utilisé pour
initialiser msg_qbytes lors de la
création de la file (msgget(2)) */
int msgmni; /* Nombre maximal de files de messages */
int msgssz; /* Taille du segment de message.
Non utilisé par le noyau */
int msgtql; /* Nombre maximal de messages dans
toutes les files du système.
Non utilisé par le noyau */
unsigned short msgseg;
/* Nombre maximal de segments.
Non utilisé par le noyau */ };
Si elles réussissent, IPC_STAT, IPC_SET et IPC_RMID renvoient 0. Une opération IPC_INFO ou MSG_INFO réussie renvoie le plus grand index d'élément utilisé dans la table interne du noyau contenant des informations sur les files de messages (cette information peut être utilisée par des opérations MSG_STAT ou MSG_STAT_ANY répétées afin d'obtenir des informations sur toutes les files du système). Une opération MSG_STAT ou MSG_STAT_ANY réussie renvoie l'identifiant de la file dont l'index était donné dans msqid.
En cas d'échec, la valeur de retour est -1 et errno est défini pour préciser l'erreur.
POSIX.1-2001, POSIX.1-2008, SVr4.
Les opérations IPC_INFO, MSG_STAT et MSG_INFO sont utilisées par le programme ipcs(1) pour fournir des informations sur les ressources allouées. À l'avenir, cela pourra être modifié ou remplacé par une interface avec le système de fichiers /proc.
Divers champs de la structure struct msqid_ds étaient de type short sous Linux 2.2 et sont devenus de type long sous Linux 2.4. Pour en profiter, une recompilation avec la glibc 2.1.91 ou ultérieure devrait suffire. (Le noyau distingue les appels anciens et nouveaux par un drapeau IPC_64 dans cmd.)
msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), sysvipc(7)
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> et Jean-Philippe MENGUAL <jpmengual@debian.org>
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 décembre 2022 | Pages du manuel de Linux 6.03 |