mq_receive, mq_timedreceive - Recevoir un message d'une file de messages
Bibliothèque de temps réel (
librt,
-lrt)
#include <mqueue.h>
ssize_t mq_receive(mqd_t mqdes, char msg_ptr[.msg_len],
size_t msg_len, unsigned int *msg_prio);
#include <time.h>
#include <mqueue.h>
ssize_t mq_timedreceive(mqd_t mqdes, char *restrict msg_ptr[.msg_len],
size_t msg_len, unsigned int *restrict msg_prio,
const struct timespec *restrict abs_timeout);
mq_timedreceive() :
_POSIX_C_SOURCE >= 200112L
mq_receive() supprime le plus vieux message avec la plus haute
priorité de la file de messages référencée par le
descripteur de file de messages
mqdes, et le place dans un tampon
pointé par
msg_ptr. L'argument
msg_len indique la taille
du tampon pointé par
msg_ptr ; celui-ci doit être
plus large ou aussi grand que l'attribut
mq_msgsize de la file
(consulter
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() behaves just like
mq_receive(), except that if
the queue is empty and the
O_NONBLOCK flag is not enabled for the
message queue description, then
abs_timeout points to a structure which
specifies how long the call will block. This value is an absolute timeout in
seconds and nanoseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC),
specified in a
timespec(3) structure.
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.
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.
- 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 ou n'est pas ouvert en lecture.
- 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é.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
mq_receive(), mq_timedreceive() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
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.
mq_close(3),
mq_getattr(3),
mq_notify(3),
mq_open(3),
mq_send(3),
mq_unlink(3),
timespec(3),
mq_overview(7),
time(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Pierre Giraud <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]