NOM
mq_send, mq_timedsend - Envoyer un message à une file de messages
SYNOPSIS
#include <mqueue.h>
mqd_t mq_send(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned msg_prio);
#define _XOPEN_SOURCE 600
#include <time.h>
#include <mqueue.h>
mqd_t mq_timedsend(mqd_t mqdes, const 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_send() ajoute le message pointé par msg_ptr à la file de messages
référencée par le descripteur mqdes. L’argument msg_len spécifie la
longueur du message pointé par msg_ptr. Cette longueur doit être
inférieure ou égale à l’attribut mq_msgsize de la file. Les messages de
longueur nulle sont permis.
L’argument msg_prio est un entier non négatif qui spécifie la priorité
de ce message. Les messages sont placés dans la file en ordre de
priorité décroissante. Les nouveaux messages avec la même priorité
seront placés après les anciens messages de même priorité.
Si la file de messages est déjà pleine (c’est-à-dire que le nombre de
messages de la file est égal à l’attribut mq_maxmsg de la file), alors
par défaut, mq_send() bloque tant qu’il n’y a pas d’espace suffisant
pour placer un message dans la file ou jusqu’à ce que l’appel soit
interrompu par un gestionnaire de signaux. Si le drapeau O_NONBLOCK est
activé pour la description de la file de messages, alors l’appel échoue
immédiatement avec l’erreur EAGAIN.
mq_timedsend() se comporte comme mq_send(), excepté que si la file est
pleine 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 h00 du 1er janvier 1970), spécifié dans la structure
suivante :
struct timespec {
time_t tv_sec; /* secondes */
long tv_nsec; /* nanosecondes */
};
Si la file de messages est pleine et si le délai d’attente a déjà
expiré pendant la durée de l’appel, mq_timedsend() s’achève
immédiatement.
VALEUR RENVOYÉE
En cas de succès, mq_send() et mq_timedsend() renvoient 0. En cas
d’erreur, elle renvoient -1 et définissent errno en conséquence.
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 grand 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_timedsend() est un appel système et mq_send() 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_receive(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> ».