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)
- Renvoie 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)
- Renvoie 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)
- Renvoie 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.
VALEUR RENVOYÉE¶
Si elles réussissent, les opérations
IPC_STAT,
IPC_SET et
IPC_RMID renvoient 0. Une opération
IPC_INFO ou
MSG_INFO réussie renvoie le plus grand indice
d'un é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
répétées afin d'obtenir des informations sur toutes les
files du système. Une opération
MSG_STAT réussie
renvoie l'identifiant de la file dont l'indice était donné dans
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
- L'argument cmd réclame l'opération 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.
- 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).
SVr4, POSIX.1-2001.
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),
svipc(7)
COLOPHON¶
Cette page fait partie de la publication 3.65 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et
l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce
document en utilisant la commande «
man -L C
<section>
<page_de_man> ».