msgctl
Section: System Calls (2)
Updated: 15 décembre 2022
Index
Return to Main Contents
NOM
msgctl - Contrôler les messages System V
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#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 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 :
- msg_perm
-
Il s'agit d'une structure ipc_perm (voir ci-dessous) qui indique les
droits d'accès à la file de messages.
- msg_stime
-
Heure du dernier appel système msgsnd(2).
- msg_rtime
-
Heure du dernier appel système msgrcv(2).
- msg_ctime
-
Heure de création de la file ou de la dernière opération IPC_SET de
msgctl().
- msg_cbytes
-
Nombre d'octets de tous les messages actuellement dans la file de
messages. Il s'agit d'une extension Linux non standard qui n'est pas
indiquée dans POSIX.
- 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).
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 :
- IPC_STAT
-
Copier les informations depuis la structure de données du noyau 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 les valeurs 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 neuf 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, en réveillant tous les processus
écrivant et lisant en attente. Ils obtiendront un code d'erreur et errno
aura la valeur EIDRM. Le processus appelant doit avoir les privilèges
appropriés ou son UID effectif doit être celui du créateur ou du
propriétaire de la file de messages. 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.
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 */
};
-
Les paramètres msgmni, msgmax et msgmnb peuvent être modifiés à
l’aide des 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 comme
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 index dans
le tableau interne au noyau qui contient des informations sur toutes les
files de messages du système.
- MSG_STAT_ANY (spécifique à Linux, depuis Linux 4.17)
-
Renvoyer une structure msqid_ds comme pour MSG_STAT. Cependant,
l'accès en lecture msg_perm.mode n'est pas vérifié pour l’accès en
lecture de msqid, ce qui veut dire que n'importe quel utilisateur peut
utiliser cette opération (tout comme n'importe quel utilisateur peut lire
/proc/sysvipc/msg pour avoir les mêmes informations).
VALEUR RENVOYÉE
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.
ERREURS
- EACCES
-
L'argument cmd équivaut à IPC_STAT ou MSG_STAT, mais le processus
appelant n'a pas d'accès en lecture sur la file de messages msqid, et n'a
pas la capacité CAP_IPC_OWNER dans l'espace de noms utilisateur qui gère
l'espace de noms IPC.
- EFAULT
-
L'argument cmd a pour valeur IPC_SET ou IPC_STAT, mais l’adresse
pointée par buf est 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 d’index indiquée par msqid pointe vers
un élément de tableau qui n'est pas en cours d'utilisation.
- EPERM
-
L'argument cmd a pour valeur 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).
STANDARDS
POSIX.1-2001, POSIX.1-2008, SVr4.
NOTES
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.)
VOIR AUSSI
msgget(2), msgrcv(2), msgsnd(2), capabilities(7),
mq_overview(7), sysvipc(7)
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>
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 04:46:08 GMT, May 22, 2024