mq_receive()
supprime le plus vieux message avec la plus grande priorité de la file de
messages référencée par la descripteur
mqdes,
et le place dans le tampon pointé par
msg_ptr.
L'argument
msg_len
spécifie la taille du tampon pointé par
msg_ptr ;
il doit être plus grand que l'attribut
mq_msgsize
de la file (voir
mq_getattr(3)).
Si
prio
n'est pas NULL, le tampon sur 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()
bloquera jusqu'à ce qu'un message soit disponible
ou que l'appel soit interrompu par un gestionnaire de signaux.
Si l'attribut
O_NONBLOCK
est activé pour la description de la file de messages,
l'appel échouera immédiatement avec l'erreur
EAGAIN.
mq_timedreceive()
se comporte comme
mq_receive(),
excepté que si la file est vide et que l'attribut
O_NONBLOCK
n'est pas activé pour la description de la file de messages,
abs_timeout
pointe sur une structure qui spécifie un plafond
sur le temps pendant lequel l'appel bloquera.
Le plafond est un délai absolu en secondes et nanosecondes
depuis l'Époque (minuit du matin 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 que le délai d'attente a déjà expiré
mq_timedreceive()
revient immédiatement.