Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
msgrcv, msgsnd - Operations sur les messages
SYNOPSIS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);
DESCRIPTION
Les appels systeme msgsnd() et msgrcv() servent respectivement a
envoyer et a recevoir des messages d'une file de messages. Le processus
appelant doit avoir une permission d'ecriture sur la file pour envoyer
un message, et une permission de lecture pour en recevoir un.
L'argument msgp est un pointeur vers une structure definie par
l'appelant de forme generale suivante :
struct msgbuf {
long mtype; /* type de message, doit etre > 0 */
char mtext[1]; /* contenu du message */
};
Le champ mtext est un tableau ou autre structure de taille msgsz,
valeur entiere positive ou nulle. Les message de taille nulle (sans
champ mtext) sont autorises. Le membre mtype doit avoir une valeur
strictement positive qui puisse etre utilisee par le processus lecteur
pour la selection de messages (voir la description de msgrcv ci-
dessous).
msgsnd()
L'appel systeme msgsnd() insere une copie du message pointe par
l'argument msgp dans la file dont l'identifiant est indique par la
valeur de l'argument msqid.
S'il y a assez de place dans la file, msgsnd() reussit immediatement.
(La capacite de la file est definie par le champ msg_qbytes de la
structure associee a la file de messages. Durant la creation de la
file, ce champ est initialise a MSGMNB octets, mais cette limite peut
etre modifiee avec msgctl(2).) S'il n'y a pas assez de place, alors le
comportement par defaut de msgsnd() est de bloquer jusqu'a obtenir
suffisamment d'espace. En indiquant IPC_NOWAIT dans l'argument msgflg,
le message ne sera pas envoye et l'appel systeme echouera en retournant
EAGAIN dans errno.
Un appel a msgsnd() bloque peut echouer si :
* la file est supprimee, auquel cas l'appel systeme echoue avec errno
valant EIDRM ; ou
* un signal a ete intercepte, auquel cas l'appel systeme echoue avec
errno valant EINTR ; consultez signal(7). (msgsnd() n'est jamais
relance automatiquement apres interruption par un gestionnaire de
signal, quelle que soit la configuration de SA_RESTART lors de
l'installation du gestionnaire.)
Si l'appel systeme reussit, la structure decrivant la file de messages
est mise a jour comme suit :
msg_lspid contient le PID du processus appelant.
msg_qnum est incremente de 1.
msg_stime est rempli avec l'heure actuelle.
msgrcv()
L'appel systeme msgrcv() supprime un message depuis la file indiquee
par msqid et le place dans le tampon pointe par msgp.
L'argument msgsz indique la taille maximale en octets du membre mtext
de la structure pointee par l'argument msgp. Si le contenu du message
est plus long que msgsz octets, le comportement depend de la presence
ou non de MSG_NOERROR dans msgflg. Si MSG_NOERROR est specifie, alors
le message sera tronque (et la partie tronquee sera perdue) ; si
MSG_NOERROR n'est pas specifie, le message ne sera pas extrait de la
file, et l'appel systeme echouera en renvoyant -1 et en indiquant E2BIG
dans errno
L'argument msgtyp indique le type de message desire :
* Si msgtyp vaut 0, le premier message est lu.
* Si msgtyp est superieur a 0, alors le premier message de type msgtyp
est extrait de la file. Si msgflg contient MSG_EXCEPT l'inverse est
effectue, le premier message de type different de msgtyp est extrait
de la file.
* Si msgtyp est inferieur a 0, le premier message de la file avec un
type inferieur ou egal a la valeur absolue de msgtyp est extrait.
L'argument msgflg est compose d'un OU binaire << | >> avec les options
suivantes :
IPC_NOWAIT
Retourne immediatement si aucun message du type desire n'est
present dans la file. L'appel systeme echoue et errno est fixe a
ENOMSG.
MSG_EXCEPT
Utilise avec msgtyp superieur a 0 pour lire les messages de type
different de msgtyp.
MSG_NOERROR
Tronque silencieusement les messages plus longs que msgsz
octets.
Si aucun message du type requis n'est disponible et si on n'a pas
demande IPC_NOWAIT dans msgflg, le processus appelant est bloque
jusqu'a l'occurrence d'un des evenements suivants :
* Un message du type desire arrive dans la file.
* La file de messages est supprimee. L'appel systeme echoue et errno
contient EIDRM.
* Le processus appelant intercepte un signal. Dans ce cas l'appel
systeme echoue avec errno valant EINTR. (msgrcv() n'est jamais
relance automatiquement apres interruption par un gestionnaire de
signal, quelle que soit la configuration de SA_RESTART lors de
l'installation du gestionnaire.)
Si l'appel systeme reussit, la structure decrivant la file de messages
est mise a jour comme suit :
msg_lrpid est rempli avec le PID du processus appelant.
msg_qnum est decremente de 1.
msg_rtime est rempli avec l'heure actuelle.
VALEUR RENVOY'EE
En cas d'echec les deux appels systeme renvoient -1 et errno contient
le code d'erreur. Sinon msgsnd() renvoie 0 et msgrcv() renvoie le
nombre d'octets copies dans la table mtext.
ERREURS
En cas d'echec de msgsnd(), errno aura l'une des valeurs suivantes :
EACCES Le processus appelant n'a pas de permissions d'ecriture dans la
file et n'a pas la capacite CAP_IPC_OWNER.
EAGAIN Le message n'a pas pu etre envoye a cause de la limite
msg_qbytes pour la file et de la requete IPC_NOWAIT dans msgflg.
EFAULT msgp pointe en dehors de l'espace d'adressage accessible.
EIDRM La file de messages a ete supprimee.
EINTR Un signal est arrive avant d'avoir pu ecrire quoi que ce soit.
EINVAL msqid est invalide, ou bien mtype n'est pas positif, ou bien
msgsz est invalide (negatif ou superieur a la valeur MSGMAX du
systeme).
ENOMEM Le systeme n'a pas assez de memoire pour copier le message
pointe par msgp.
En cas d'echec de msgrcv(), errno prend l'une des valeurs suivantes :
E2BIG Le message est plus long que msgsz, et MSG_NOERROR n'a pas ete
indique dans msgflg.
EACCES Le processus appelant n'a pas de permission de lecture dans la
file et n'a pas la capacite CAP_IPC_OWNER.
EAGAIN Aucun message n'est disponible dans la file, et IPC_NOWAIT est
specifie dans msgflg.
EFAULT msgp pointe en dehors de l'espace d'adressage accessible.
EIDRM La file de messages a ete supprimee alors que le processus
attendait un message.
EINTR Un signal est arrive avant d'avoir pu lire quoi que ce soit ;
consultez signal(7).
EINVAL msgqid ou msgsz invalides.
ENOMSG IPC_NOWAIT a ete requis dans msgflg et aucun message du type
reclame n'existe dans la file.
CONFORMIT'E
SVr4, POSIX.1-2001.
NOTES
L'argument msgp est declare comme un struct msgbuf * avec les
bibliotheques libc4, libc5, glibc 2.0, glibc 2.1. Il est declare comme
un void * avec la bibliotheque glibc 2.2, suivant ainsi les
specifications SUSv2 et SUSv3.
Les limites systeme concernant les files de messages et affectant
msgsnd() sont :
MSGMAX Taille maximale d'un message : 8192 octets (sous Linux, cette
limite peut etre lue et modifiee grace au fichier
/proc/sys/kernel/msgmax).
MSGMNB Taille maximale, en octets, d'une file de messages : 16384
octets (sous Linux, elle peut etre lue et modifiee grace au
fichier /proc/sys/kernel/msgmnb). Le superutilisateur peut
augmenter la taille d'une file de messages au-dela de MSGMNB en
utilisant l'appel systeme msgctl(2).
L'implementation des files de messages sous Linux n'a pas de limite
intrinseque pour le nombre maximal d'en-tetes de messages (MSGTQL) et
la taille maximale, en octets, de l'ensemble de tous les messages sur
le systeme (MSGPOOL).
VOIR AUSSI
msgctl(2), msgget(2), capabilities(7), mq_overview(7), svipc(7)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.