Votre IP: 38.107.179.243 
  
 
Google
 
Accueil e-mail Linux
Linux
Perl
Perl
C
Langage C
Dico
Dictionnaire
Biblio liens
Bibliothèque de liens
Index articles
Index articles
 

Date création : 27-03-2008 20:23:44

Linux  Vous êtes dans : GNU/Linux Astuces / Pages man [Section2 - Appels système]


MSGCTL

 

Index

  1. NOM
  2. SYNOPSIS
  3. DESCRIPTION
  4. VALEUR RENVOYÉE
  5. ERREURS
  6. NOTES
  7. CONFORMITÉ
  8. VOIR AUSSI
  9. TRADUCTION

 

NOMIndex

msgctl - Contrôler les messages  

SYNOPSISIndex

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

int msgctl(int msqid, int cmd, struct msqid_ds *buf);  

DESCRIPTIONIndex

Cette fonction permet d'effectuer l'opération indiquée par cmd sur la file de messages 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() */
    time_t         msg_rtime;    /* Heure du dernier msgrcv() */
    time_t         msg_ctime;    /* Heure de la 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() */
    pid_t          msg_lrpid;    /* PID du dernier msgrcv() */
};

La structure ipc_perm est définie comme suit dans <sys/ipc.h> (les champs en gras peuvent être modifiés en utilisant IPC_SET) :
struct ipc_perm {
    key_t key;            /* Clé fournie à msgget() */
    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_IPC_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é.
IPC_INFO (seulement sous 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 _GNU_SOURCE est définie :

struct msginfo {
    int msgpool; /* Taille en octets du tampon utilisé pour
                    stocker les données des messages ; inutilisé */
    int msgmap;  /* Nombre maximal d'entrées dans la table
                    des messages ; inutilisé */
    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()) */
    int msgmni;  /* Nombre maximal de files de message */
    int msgssz;  /* Taille du segment de message ; inutilisé */
    int msgtql;  /* Nombre maximal de messages dans toutes les files
                    du système ; inutilisé */
    unsigned short int msgseg;
                 /* Nombre maximal de segments ; inutilisé */
};

Les paramètres msgmni, msgmax et msgmnb peuvent être modifiés via les fichiers du même nom dans /proc. Voir 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ÉEIndex

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.  

ERREURSIndex

En cas d'échec, 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 le processus n'est pas privilégié (sous Linux, il n'a pas la capacité CAP_SYS_ADMIN).
 

NOTESIndex

Les appels IPC_INFO, MSG_STAT et MSG_INFO sont utilisés par le programme ipcs(8) 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 des shorts sous Linux 2.2 et sont devenus longs 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.)  

CONFORMITÉIndex

SVr4, POSIX.1-2001.  

VOIR AUSSIIndex

msgget(2), msgrcv(2), msgsnd(2), capabilities(7), mq_overview(7), svipc(7)  

TRADUCTIONIndex

Cette page de manuel a été traduite et mise à jour par Christophe Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par Alain Portal <aportal AT univ-montp2 DOT fr> jusqu'en 2006.
La traduction de cette page de manuel est basée sur les traductions disponibles sur http://manpagesfr.free.fr/, mais est gérée par l'équipe francophone de traduction de Debian au travers de la liste de discussion debian-l10n-french.
Veuillez signaler toute erreur de traduction 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> ».


Création : octobre 2007  © Tous droits réservés 2007 linux-perl-c
Valid HTML 4.01 TransitionalValid CSS