msgctl(2) System Calls Manual msgctl(2) NOM msgctl - Controler les messages System V BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int msgctl(int msqid, int op, struct msqid_ds *buf); DESCRIPTION Cette fonction permet d'effectuer l'operation indiquee par op sur la file de messages System V ayant l'identifiant msqid. La structure msqid_ds est declaree dans comme suit : struct msqid_ds { struct ipc_perm msg_perm; /* Proprietaire 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 creation 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'acces a la file de messages. msg_stime Heure du dernier appel systeme msgsnd(2). msg_rtime Heure du dernier appel systeme msgrcv(2). msg_ctime Heure de creation de la file ou de la derniere operation 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 indiquee dans POSIX. msg_qnum Nombre de messages actuellement dans la file de messages. msg_qbytes Nombre maximal d'octets de texte de message autorises dans la file de messages. msg_lspid Identifiant du processus qui a effectue le dernier appel systeme msgsnd(2). msg_lrpid Identifiant du processus qui a effectue le dernier appel systeme msgrcv(2). La structure ipc_perm est definie de la facon suivante (les champs en gras peuvent etre modifies en utilisant IPC_SET) : struct ipc_perm { key_t __key; /* Cle fournie a msgget(2) */ uid_t uid; /* UID effectif du proprietaire */ gid_t gid; /* GID effectif du proprietaire */ uid_t cuid; /* UID effectif du createur */ gid_t cgid; /* GID effectif du createur */ unsigned short mode; /* Permissions */ unsigned short __seq; /* Numero de sequence */ }; Les neuf bits de poids faible du champ mode de la structure ipc_perm definissent les droits d'acces a la file de messages. Les bits de droits sont les suivants : 0400 Lisible par l'utilisateur 0200 Droit d'ecriture pour l'utilisateur 0040 Lisible par le groupe 0020 Autorisation d'ecriture pour le groupe 0004 Lisible par les autres 0002 Ecrit par d'autres Les bits 0100, 0010 et 0001 (les bits d'execution) sont inusites par le systeme. Les valeurs autorisees pour op sont : IPC_STAT Copier les informations depuis la structure de donnees du noyau representant la file de messages identifiee par msqid dans la structure msqid_ds pointee par buf. L'appelant doit avoir des privileges d'acces en lecture sur la file de messages. IPC_SET Ecrire les valeurs de certains champs de la structure msqid_ds pointee par buf dans la structure du noyau representant la file de messages, en mettant a jour le champ msg_ctime. Les champs suivants de la structure peuvent etre mis a 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 etre soit celui du proprietaire (msg_perm.uid), soit celui du createur (msg_perm.cuid) de la file de messages, ou bien l'appelant doit etre privilegie. Des privileges particuliers (sous Linux, la capacite CAP_SYS_RESOURCE) sont necessaires pour augmenter la valeur de msg_qbytes au-dessus de la constante systeme MSGMNB. IPC_RMID Effacer immediatement la file de messages, en reveillant tous les processus ecrivant et lisant en attente. Ils obtiendront un code d'erreur et errno aura la valeur EIDRM. Le processus appelant doit avoir les privileges appropries ou son UID effectif doit etre celui du createur ou du proprietaire de la file de messages. Le troisieme argument de msgctl() est dans ce cas ignore. IPC_INFO (specifique a Linux) Renvoyer des informations sur les limites et parametres du systeme relatifs aux files de messages dans la structure pointee par buf. Cette structure est de type msginfo (ce qui necessite un transtypage), qui est defini dans si la macro de test de fonctionnalites _GNU_SOURCE est definie : struct msginfo { int msgpool; /* Taille en kibioctets du tampon utilise pour stocker les donnees des messages. Non utilise par le noyau */ int msgmap; /* Nombre maximal d'entrees dans la table des messages. Non utilise par le noyau */ int msgmax; /* Nombre maximal d'octets pouvant etre ecrits dans un seul message */ int msgmnb; /* Nombre maximal d'octets pouvant etre ecrits dans une file. Utilise pour initialiser msg_qbytes lors de la creation de la file (msgget(2)) */ int msgmni; /* Nombre maximal de files de messages */ int msgssz; /* Taille du segment de message. Non utilise par le noyau */ int msgtql; /* Nombre maximal de messages dans toutes les files du systeme. Non utilise par le noyau */ unsigned short msgseg; /* Nombre maximal de segments. Non utilise par le noyau */ }; Les parametres msgmni, msgmax et msgmnb peuvent etre modifies a l'aide des fichiers du meme nom dans /proc. Consultez proc(5) pour plus de details. MSG_INFO (specifique a Linux) Renvoyer une structure msginfo contenant les memes informations comme pour IPC_INFO, sauf que les champs suivants contiennent des informations sur les ressources systeme utilisees par des files de messages : le champ msgpool indique le nombre de files de messages existant actuellement sur le systeme ; le champ msgmap contient le nombre total de messages dans l'ensemble des files du systeme ; enfin le champ msgtql contient le nombre total d'octets dans tous les messages de toutes les files du systeme. MSG_STAT (specifique a 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 systeme. MSG_STAT_ANY (specifique a Linux, depuis Linux 4.17) Renvoyer une structure msqid_ds comme pour MSG_STAT. Cependant, l'acces en lecture msg_perm.mode n'est pas verifie pour l'acces en lecture de msqid, ce qui veut dire que n'importe quel utilisateur peut utiliser cette operation (tout comme n'importe quel utilisateur peut lire /proc/sysvipc/msg pour avoir les memes informations). VALEUR RENVOYEE Si elles reussissent, IPC_STAT, IPC_SET et IPC_RMID renvoient 0. Une operation IPC_INFO ou MSG_INFO reussie renvoie le plus grand index d'element utilise dans la table interne du noyau contenant des informations sur les files de messages (cette information peut etre utilisee par des operations MSG_STAT ou MSG_STAT_ANY repetees afin d'obtenir des informations sur toutes les files du systeme). Une operation MSG_STAT ou MSG_STAT_ANY reussie renvoie l'identifiant de la file dont l'index etait donne dans msqid. En cas d'echec, la valeur de retour est -1 et errno est defini pour preciser l'erreur. ERREURS EACCES L'argument op equivaut a IPC_STAT ou MSG_STAT, mais le processus appelant n'a pas d'acces en lecture sur la file de messages msqid, et n'a pas la capacite CAP_IPC_OWNER dans l'espace de noms utilisateur qui gere l'espace de noms IPC. EFAULT L'argument op a pour valeur IPC_SET ou IPC_STAT, mais l'adresse pointee par buf est en dehors de l'espace d'adressage accessible. EIDRM La file de messages a ete supprimee. EINVAL op ou msqid ont une valeur illegale. Ou alors, dans le cas d'une operation MSG_STAT, la valeur d'index indiquee par msqid pointe vers un element de tableau qui n'est pas en cours d'utilisation. EPERM L'argument op a pour valeur IPC_SET ou IPC_RMID, mais l'UID effectif du processus appelant n'est pas le createur (comme indique dans msg_perm.cuid) ou le proprietaire (comme indique dans msg_perm.uid) de la file de messages, et l'appelant n'est pas privilegie (sous Linux, il n'a pas la capacite CAP_SYS_ADMIN). EPERM Il a ete tente (via IPC_SET) d'augmenter msg_qbytes au-dela du parametre systeme MSGMNB, mais l'appelant n'est pas privilegie (sous Linux, il n'a pas la capacite CAP_SYS_RESOURCE). STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001, SVr4. Divers champs de la structure struct msqid_ds etaient 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 ulterieure devrait suffire. (Le noyau distingue les appels anciens et nouveaux par un drapeau IPC_64 dans op.) NOTES Les operations IPC_INFO, MSG_STAT et MSG_INFO sont utilisees par le programme ipcs(1) pour fournir des informations sur les ressources allouees. A l'avenir, cela pourra etre modifie ou remplace par une interface avec le systeme de fichiers /proc. VOIR AUSSI msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), sysvipc(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.8 2 mai 2024 msgctl(2)