NOM
msgctl - Contrôler les messages System V
SYNOPSIS
#include
<sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
DESCRIPTION
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 permissions */ time_t msg_stime; /* Heure du dernier msgsnd(2) */ time_t msg_rtime; /* Heure du dernier msgrcv(2) */ time_t msg_ctime; /* Heure dernière modification */ 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 maximal 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 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 valeurs
autorisées pour cmd sont :
IPC_STAT
Copier les informations depuis la structure représentant la file de messages identifiée par msqid dans la structure msqid_ds pointée par buf. L’appelant doit avoir des privilèges d’accès en lecture sur la file de messages.
IPC_SET
Écrire la valeur de certains champs de la structure msqid_ds pointée par buf dans la structure du noyau représentant la file de messages, en mettant à jour le champ msg_ctime. Les champs suivants de la structure peuvent être mis à jour : msg_qbytes, msg_perm.uid, msg_perm.gid et les 9 bits de poids faible de msg_perm.mode. L’UID effectif du processus appelant doit être soit celui du propriétaire (msg_perm.uid), soit celui du créateur (msg_perm.cuid) de la file de messages, ou bien l’appelant doit être privilégié. Des privilèges particuliers (sous Linux, la capacité CAP_SYS_RESOURCE) sont nécessaires pour augmenter la valeur de msg_qbytes au-dessus de la constante système MSGMNB.
IPC_RMID
Effacer immédiatement la file de messages et ses structures de données, en réveillant tous les processus écrivains et lecteurs en attente. Ils obtiendront un code d’erreur, et errno aura la valeur EIDRM. L’UID effectif du processus appelant doit être celui du créateur ou du propriétaire de la file de messages, ou bien le processus appelant doit être privilégié. Le troisième argument de msgctl() est dans ce cas ignoré.
IPC_INFO (spécifique à Linux)
Renvoyer des informations sur les limites et paramètres du système relatifs aux files de messages dans la structure pointée par buf. Cette structure est de type msginfo (ce qui nécessite un transtypage), qui est défini dans <sys/msg.h> si la macro de test de fonctionnalités _GNU_SOURCE est définie :
struct msginfo { int msgpool; /* Taille en kibioctets du tampon utilisé pour stocker les données des messages ; pas utilisé par le noyau */ int msgmap; /* Nombre maximal d’entrées dans la table des messages ; pas 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 message */ int msgssz; /* Taille du segment de message ; pas utilisé par le noyau */ int msgtql; /* Nombre maximal de messages dans toutes les files du système ; pas utilisé par le noyau */ unsigned short int msgseg; /* Nombre maximal de segments ; pas utilisé par le noyau */ };
Les paramètres msgmni, msgmax et msgmnb peuvent être modifiés via les fichiers du même nom dans /proc. Consultez proc(5) pour plus de détails.
MSG_INFO (Spécifique à Linux)
Renvoyer une structure msginfo contenant les mêmes informations que pour IPC_INFO, sauf que les champs suivants contiennent des informations sur les ressources système utilisées par des files de messages : le champ msgpool indique le nombre de files de messages existant actuellement sur le système ; le champ msgmap contient le nombre total de messages dans l’ensemble des files du système ; enfin le champ msgtql contient le nombre total d’octets dans tous les messages de toutes les files du système.
MSG_STAT (Spécifique à Linux)
Renvoyer une structure msqid_ds comme pour IPC_STAT. Cependant, l’argument msqid n’est pas l’identifiant d’une file, mais un indice dans le tableau interne au noyau qui contient des informations sur toutes les files de messages du système.
MSG_STAT_ANY (Linux-specific, since Linux 4.17)
Return a msqid_ds structure as for MSG_STAT. However, msg_perm.mode is not checked for read access for msqid meaning that any user can employ this operation (just as any user may read /proc/sysvipc/msg to obtain the same information).
VALEUR DE RETOUR
On success, IPC_STAT, IPC_SET, and IPC_RMID return 0. A successful IPC_INFO or MSG_INFO operation returns the index of the highest used entry in the kernel’s internal array recording information about all message queues. (This information can be used with repeated MSG_STAT or MSG_STAT_ANY operations to obtain information about all queues on the system.) A successful MSG_STAT or MSG_STAT_ANY operation returns the identifier of the queue whose index was given in msqid.
En cas d’erreur -1 est renvoyé, et errno contient le code d’erreur.
ERREURS
En cas d’erreur, errno prend l’une des valeurs suivantes :
EACCES |
The argument cmd is equal to IPC_STAT or MSG_STAT, but the calling process does not have read permission on the message queue msqid, and does not have the CAP_IPC_OWNER capability in the user namespace that governs its IPC namespace. | ||
EFAULT |
L’argument cmd réclame l’opération IPC_SET ou IPC_STAT mais buf pointe en dehors de l’espace d’adressage accessible. | ||
EIDRM |
La file de messages a été supprimée. | ||
EINVAL |
cmd ou msqid ont une valeur illégale. Ou alors, dans le cas d’une opération MSG_STAT, la valeur indiquée par msqid pointe vers un élément de tableau qui n’est pas en cours d’utilisation. | ||
EPERM |
L’argument cmd réclame l’opération IPC_SET ou IPC_RMID mais l’UID effectif du processus appelant n’est pas le créateur (comme indiqué dans msg_perm.cuid) ou le propriétaire (comme indiqué dans msg_perm.uid) de la file de messages, et l’appelant n’est pas privilégié (sous Linux, il n’a pas la capacité CAP_SYS_ADMIN). | ||
EPERM |
Il a été tenté (via IPC_SET) d’augmenter msg_qbytes au-delà du paramètre système MSGMNB, mais l’appelant n’est pas privilégié (sous Linux, il n’a pas la capacité CAP_SYS_RESOURCE). |
CONFORMITÉ
POSIX.1-2001, POSIX.1-2008, SVr4.
NOTES
L’inclusion de <sys/types.h> et <sys/ipc.h> n’est pas nécessaire sous Linux et n’est exigée par aucune version de POSIX. Cependant, certaines implémentations anciennes nécessitent l’inclusion de ces fichiers d’en-tête, et le SVID documente aussi leur inclusion. Les applications ayant pour but d’être portables pourraient inclure ces fichiers d’en-tête.
Les appels IPC_INFO, MSG_STAT et MSG_INFO sont utilisés par le programme ipcs(1) pour fournir des informations sur les ressources allouées. À l’avenir, ceci 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.)
VOIR AUSSI
msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), sysvipc(7)
COLOPHON
Cette page fait partie de la publication 5.05 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies 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 <http://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin [AT] laposte.net>, Thierry Vignaud <tvignaud [AT] mandriva.com>, François Micaux, Alain Portal <aportal [AT] univ-montp2.fr>, Jean-Philippe Guérard <fevrier [AT] tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Nicolas François <nicolas.francois [AT] centraliens.net>, Florentin Duneau <fduneau [AT] gmail.com>, Simon Paillard <simon.paillard [AT] resel.fr>, Denis Barbier <barbier [AT] debian.org> et David Prévot <david [AT] tilapin.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 [AT] lists.org>.