mq_getattr(3)

NOM
mq_getattr, mq_setattr - Lire et écrire les attributs d'une file de messages

BIBLIOTHÈQUE
Bibliothèque de temps réel (librt, -lrt)

SYNOPSIS
#include <mqueue.h>

int mq_getattr(mqd_t mqdes, struct mq_attr *attr);
int mq_setattr(mqd_t mqdes, const struct mq_attr *restrict newattr,
               struct mq_attr *restrict oldattr);

DESCRIPTION
Les fonctions mq_getattr() et mq_setattr() extraient et modifient respectivement les attributs de la file de messages référencée par le descripteur de file de messages mqdes.

mq_getattr() renvoie une structure mq_attr dans le tampon pointé par attr. Cette structure est définie comme suit :

    struct mq_attr {
        long mq_flags;       /* Drapeaux : 0 or O_NONBLOCK */
        long mq_maxmsg;      /* Max. # de messages dans la file */
        long mq_msgsize;     /* Max de la taille du message (octets) */
        long mq_curmsgs;     /* # de messages actuellement dans la file */
    };

Le champ mq_flags contient des drapeaux associés à la description de la file de messages ouverte. Ce champ est initialisé lorsque la file est créée avec mq_open(3). Le seul drapeau qui peut apparaître dans ce champ est O_NONBLOCK.

Les champs mq_maxmsg et mq_msgsize sont définis lorsque la file de messages est créée avec mq_open(3). Le champ mq_maxmsg est le nombre maximal de messages qui peuvent être placés dans la file avec mq_send(3). Le champ mq_msgsize est la taille maximale des messages qui peuvent être placés dans la file. Chacun de ces champs doit avoir une valeur supérieure à zéro. Deux fichiers de /proc qui plafonnent ces valeurs pour ces champs sont décrites dans mq_overview(7).

Le champ mq_curmsgs renvoie le nombre de messages actuellement dans la file.

mq_setattr() définit les attributs de la file de messages avec les informations fournies par la structure mq_attr pointée par newattr. Le seul attribut qui peut être modifié est le drapeau O_NONBLOCK de mq_flags. Les autres champs de newattr sont ignorés. Si le champ oldattr est non NULL, alors le tampon qu'il pointe est utilisé pour renvoyer une structure mq_attr contenant les mêmes informations que la fonction mq_getattr() renverrait.

VALEUR RENVOYÉE
En cas de succès, mq_getattr() et mq_setattr() renvoient 0. En cas d'erreur, elles renvoient -1 et définissent errno en conséquence.

ERREURS

EBADF
    Le descripteur de file de messages spécifié dans mqdes n'est pas valable.

EINVAL
    newattr->mq_flags contient des bits définis autres que O_NONBLOCK.

ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface | Attribut | Valeur
mq_getattr(), mq_setattr() | Sécurité des threads | MT-Safe

STANDARDS
POSIX.1-2001, POSIX.1-2008.

NOTES
Sous Linux, mq_getattr() et mq_setattr() sont des fonctions de bibliothèque au dessus de l'appel système mq_getsetattr(2).

EXEMPLES
Le programme ci-dessous peut être utilisé pour afficher les valeurs par défaut de mq_maxmsg et mq_msgsize assignées à une file de messages qui est créée avec un appel à mq_open(3) dans lequel le paramètre est NULL. Voici un exemple d'exécution du programme.

    $ ./a.out /testq
    Maximum # of messages on queue:   10
    Maximum message size:             8192

Depuis Linux 3.5, les fichiers suivants de /proc (décrits dans) mq_overview(7)) peuvent être utilisés pour contrôler les valeurs par défaut :

    $ uname -sr
    Linux 3.8.0
    $ cat /proc/sys/fs/mqueue/msg_default
    10
    $ cat /proc/sys/fs/mqueue/msgsize_default
    8192

  Source du programme
    #include <fcntl.h>
    #include <mqueue.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                            } while (0)
    int
    main(int argc, char *argv[])
    {
        mqd_t mqd;
        struct mq_attr attr;
        if (argc != 2) {
            fprintf(stderr, "Usage: %s mq-name\n", argv[0]);
            exit(EXIT_FAILURE);
        }
        mqd = mq_open(argv[1], O_CREAT | O_EXCL, 0600, NULL);
        if (mqd == (mqd_t) -1)
            errExit("mq_open");
        if (mq_getattr(mqd, &attr) == -1)
            errExit("mq_getattr");
       printf("Nbre maximal de messages de la file : %ld\n", attr.mq_maxmsg);
       printf("Taille maximale de message :          %ld\n", attr.mq_msgsize);
        if (mq_unlink(argv[1]) == -1)
            errExit("mq_unlink");
        exit(EXIT_SUCCESS);
    }

VOIR AUSSI
mq_close(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 à debian-l10n-french@lists.debian.org.