NOM
mq_receive, mq_timedreceive - Recevoir un message d’une file de
messages
SYNOPSIS
#include <mqueue.h>
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr,
size_t msg_len, unsigned *msg_prio);
#define _XOPEN_SOURCE 600
#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.
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 (voyez mq_getattr(3)). Si 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 actif pour la
description de la file de messages, alors abs_timeout pointe vers une
structure qui spécifie une limite de l’heure jusqu’à laquelle l’appel
sera bloqué. Cette limite est un délai absolu en secondes et
nanosecondes depuis Epoch (00 h 00 du 1er janvier 1970), 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.
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.
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 ; voir
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é.
CONFORMITÉ
POSIX.1-2001.
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.
VOIR AUSSI
mq_close(3), mq_getattr(3), mq_notify(3), mq_open(3), mq_send(3),
mq_unlink(3), feature_test_macros(7), mq_overview(7), time(7)
COLOPHON
Cette page fait partie de la publication 3.23 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
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, et mise à
disposition sur http://manpagesfr.free.fr/.
Les mises à jour et corrections de la version présente dans Debian sont
directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
francophone de traduction de Debian.
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> ».