1. NOM▲
mq_receive, mq_timedreceive - Recevoir un message d'une file de messages
2. SYNOPSIS ▲
#include <mqueue.h>
ssize_t mq_receive
(
mqd_t mqdes, char
*
msg_ptr,
size_t msg_len, unsigned
*
msg_prio);
#include <time.h>
#include <mqueue.h>
ssize_t mq_timedreceive
(
mqd_t mqdes, char
*
msg_ptr,
size_t msg_len, unsigned
*
msg_prio,
const
struct
timespec *
abs_timeout);
Effectuez l'édition des liens avec l'option -lrt.
Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :
mq_timedreceive() :
_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L
3. DESCRIPTION ▲
mq_receive() supprime le plus vieux message avec la plus haute priorité de la file de messages référencée par mqdes, et le place dans un tampon pointé par msg_ptr. L'argument msg_len spécifie la taille du tampon pointé par msg_ptr ; celui-ci doit être plus large que l'attribut mq_msgsize de la file (consultez mq_getattr(3)). Si msg_prio est non NULL, alors le tampon vers lequel il pointe est utilisé pour renvoyer la priorité associée au message reçu. Si la file est vide, alors par défaut, mq_receive() bloque tant qu'aucun message n'est disponible, ou que l'appel n'est pas interrompu par un gestionnaire de signaux. Si le drapeau O_NONBLOCK est activé dans la description de file de messages, alors l'appel échouera immédiatement avec l'erreur EAGAIN. mq_timedreceive() se comporte comme mq_receive(), excepté que si la file est vide et si le drapeau O_NONBLOCK n'est pas activé dans la description de la file de messages, alors abs_timeout pointe vers une structure qui spécifie un temps pendant lequel l'appel sera bloqué. Cette limite est un délai absolu en secondes et nanosecondes depuis l'époque, 1er janvier 1970 à 00:00:00 (UTC), spécifié dans la structure suivante :
struct
timespec {
time_t tv_sec; /* secondes */
long
tv_nsec; /* nanosecondes */
}
;
Si aucun message n'est disponible et si le délai d'attente a déjà expiré pendant la durée de l'appel, mq_timedreceive() s'achève immédiatement.
4. VALEUR RENVOYÉE ▲
En cas de succès, mq_receive() et mq_timedreceive() renvoient le nombre d'octets du message reçu. En cas d'erreur, -1 est renvoyé et errno indique l'erreur.
5. ERREURS ▲
- EAGAIN
La file est vide et le drapeau O_NONBLOCK était défini pour la file de messages référencée par le descripteur mqdes. - EBADF
Le descripteur spécifié dans mqdes n'est pas valable. - EINTR
L'appel a été interrompu par un gestionnaire de signal ; consultez signal(7). - EINVAL
L'appel devrait être bloqué, et abs_timeout n'est pas valable, soit car tv_sec est inférieur à zéro, ou soit car tv_nsec est inférieur à zéro ou plus grand que 1000 millions. - EMSGSIZE
msg_len était plus petit que l'attribut mq_msgsize de la file de messages. - ETIMEDOUT
Le délai d'attente de l'appel a expiré avant que le message ait été transféré.
6. CONFORMITÉ ▲
POSIX.1-2001.
7. NOTES ▲
Sous Linux, mq_timedreceive() est un appel système et mq_receive() est une fonction de bibliothèque au dessus de la couche des appels systèmes.
8. VOIR AUSSI ▲
mq_close(3), mq_getattr(3), mq_notify(3), mq_open(3), mq_send(3), mq_unlink(3), mq_overview(7), time(7)
9. COLOPHON ▲
Cette page fait partie de la publication 3.52 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/.
10. 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). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <>.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».