mq_send

Autres langues

Langue: fr

Version: 25 février 2006 (mandriva - 01/05/08)

Autres sections - même nom

Section: 3 (Bibliothèques de fonctions)

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);
 

DESCRIPTION

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 autorisés

L'argument msg_prio est un entier positif ou nul qui spécifie la priorité de ce mesage. Les mesages sont placés dans la file par ordre décroissant de priorité, avec les nouveaux messages de même priorité placé après les plus vieux messages de même priorité.

Si la file de messages est déjà pleine (c'est-à-dire que le nombre de messages dans la file est égal à l'attribut mq_maxmsg de la file), alors, par défaut, mq_send() bloquera jusqu'à ce que suffisamment d'espace ne devienne disponible pour permette l'ajout du message dans la file, ou jusqu'à ce que l'appel ne soit interrompu par un gestionnaire de signaux. Si l'attribut O_NONBLOCK est activé pour la description ded la file de messages, l'appel échouera immédiatement avec l'erreur EAGAIN.

mq_timedsend() se comporte comme mq_send(), excepté que si la file est pleine 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 la file de messages est pleine et que le délai a expiré mq_timedsend() revient immédiatement.

VALEUR RENVOYÉE

S'ils réussissent, mq_send() et mq_timedsend() renvoient 0 ; s'ils échouent, ils renvoient -1 et écrivent errno en conséquence.

ERREURS

EAGAIN
La file de message est vide et l'attribut O_NONBLOCK est positionné pour la description de la file de messages référencée par mqdes.
EBADF
Le descripteur spécifié par mqdes n'est pas valide.
EMSGSIZE
msg_len est plus grand que l'attribut mq_msgsize de la file de messages.
EINTR
L'appel a été interrompu par un gestionnaire de signaux.
EINVAL
L'appel a bloqué et abs_timeout n'est pas valide, soit parce que tv_sec est plus petit que zéro, soit parce que tv_nsec est plus petit que zéro ou plus grand que 1000 millions.
ETIMEDOUT
Le délai d'attente de l'appel a expiré avant que le message ait été transféré.

CONFORMITÉ

POSIX.1-2001.

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)

TRADUCTION

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 23 juillet 2006 et révisée le 26 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 mq_send ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.