#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgctl(int msqid, int cmd, struct msqid_ds *buf);
La structure de données msqid_ds est définie dans <sys/msg.h> de la manière suivante :
struct msqid_ds {
struct ipc_perm msg_perm; /* Appartenance et permissions */
time_t msg_stime; /* Heure du dernier msgsnd(2) */
time_t msg_rtime; /* Heure du dernier msgrcv(2) */
time_t msg_ctime; /* Heure de la dernière modif */
unsigned long __msg_cbytes; /* Nombre actuel d'octets dans la
file (non standard) */
msgqnum_t msg_qnum; /* Nombre actuel de messages dans
la file */
msglen_t msg_qbytes; /* Nombre maximum d'octets
autorisés dans la file */
pid_t msg_lspid; /* PID du dernier msgsnd(2) */
pid_t msg_lrpid; /* PID du dernier msgrcv(2) */
};
La structure ipc_perm est définie dans <sys/ipc.h> de la façon suivante (les champs mis en évidence sont configurables 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 valeurs possibles pour cmd sont :
L'UID effectif du processus appelant doit être celui du propriétaire (msg_perm.uid) ou celui du créateur (msg_perm.cuid) de la file de messages ou l'appelant doit être privilégié. Des privilèges appropriés (sous Linux, la capacité CAP_IPC_RESOURCE) sont nécessaires pour augmenter la valeur de msg_qbytes au-dessus de la constante système MSGMNB.
struct msginfo {
int msgpool; /* Taille en kibioctets du tampon utilisé pour
stocker les données messages ;
inutilisé par le noyau */
int msgmap; /* Nombre maximum d'entrées dans la table des
messages ; inutilisé dans le noyau */
int msgmax; /* Nombre maximum d'octets pouvant
être écrit dans un message */
int msgmnb; /* Nombre maximum 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 maximum de files de messages */
int msgssz; /* Taille du segment de message ;
inutilisé par le noyau */
int msgtql; /* Nombre maximum de messages dans toutes les files
du système ; inutilisé dans le noyau */
unsigned short int msgseg;
/* Nombre maximum de segments ;
inutilisé par le noyau */
};
Les réglages
msgmni,
msgmax
et
msgmnb
peuvent être modifié via les fichiers
/proc
de même nom ; voir
proc(5)
pour plus de détails.
Divers champs de la structure struct msqid_ds étaient de type short sous Linux 2.2 et sont devenus 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.)
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 14 octobre 1996 et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 msgctl ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Dernière mise à jour : 17 juillet 2008