mq_send, mq_timedsend - Envoyer un message à une file de messages
Bibliothèque de temps réel (
librt,
-lrt)
#include <mqueue.h>
int mq_send(mqd_t mqdes, const char msg_ptr[.msg_len],
size_t msg_len, unsigned int msg_prio);
#include <time.h>
#include <mqueue.h>
int mq_timedsend(mqd_t mqdes, const char msg_ptr[.msg_len],
size_t msg_len, unsigned int msg_prio,
const struct timespec *abs_timeout);
mq_timedsend() :
_POSIX_C_SOURCE >= 200112L
mq_send() ajoute le message pointé par
msg_ptr à la
file de messages référencée par le descripteur de file de
messages
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é. Consulter
mq_overview(7) pour
plus de détails sur la plage de priorité des messages.
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() behaves just like
mq_send(), except that if the
queue is full 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 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.
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.
- EAGAIN
- La file est pleine 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 écriture.
- 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 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é.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
mq_send(), mq_timedsend() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
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.
mq_close(3),
mq_getattr(3),
mq_notify(3),
mq_open(3),
mq_receive(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]