mq_getattr(3) Library Functions Manual mq_getattr(3)

mq_getattr, mq_setattr - obține/stabilește atributele cozii de mesaje

Biblioteca de timp real (librt, -lrt)

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

mq_getattr() și mq_setattr() extrag și, respectiv, modifică atributele cozii de așteptare a mesajelor la care se face referire prin descriptorul cozii de așteptare a mesajelor mqdes.

mq_getattr() returnează o structură mq_attr în memoria tampon indicată de attr. Această structură se definește astfel:


struct mq_attr {
    long mq_flags;       /* Fanioane: 0 sau O_NONBLOCK */
    long mq_maxmsg;      /* Numărul maxim de mesaje în coadă */
    long mq_msgsize;     /* Dimensiunea maximă a mesajului (octeți)) */
    long mq_curmsgs;     /* Numărul de mesaje aflate în prezent în coadă */
};

Câmpul mq_flags conține fanioanele asociate cu descrierea cozii de mesaje deschise. Acest câmp este inițializat atunci când coada este creată de mq_open(3). Singurul fanion care poate apărea în acest câmp este O_NONBLOCK.

Câmpurile mq_maxmsg și mq_msgsize sunt stabilite atunci când coada de mesaje este creată de mq_open(3). Câmpul mq_maxmsg reprezintă o limită superioară a numărului de mesaje care pot fi plasate în coada de așteptare cu ajutorul mq_send(3). Câmpul mq_msgsize este o limită superioară a dimensiunii mesajelor care pot fi plasate în coada de așteptare. Ambele câmpuri trebuie să aibă o valoare mai mare decât zero. Două fișiere /proc care impun plafoane pentru valorile acestor câmpuri sunt descrise în mq_overview(7).

Câmpul mq_curmsgs returnează numărul de mesaje aflate în prezent în coada de așteptare.

mq_setattr() stabilește atributele cozii de mesaje utilizând informațiile furnizate în structura mq_attr indicată de newattr. Singurul atribut care poate fi modificat este stabilirea fanionului O_NONBLOCK din mq_flags. Celelalte câmpuri din newattr sunt ignorate. În cazul în care câmpul oldattr nu este NULL, atunci memoria tampon la care indică este utilizată pentru a returna o structură mq_attr care conține aceleași informații ca cele returnate de mq_getattr().

În caz de succes, mq_getattr() și mq_setattr() returnează 0; în caz de eroare, se returnează -1, cu errno configurată pentru a indica eroarea.

Descriptorul de coadă de mesaje specificat în mqdes nu este valid.
newattr->mq_flags conținea alți biți activați decât O_NONBLOCK.

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
mq_getattr(), mq_setattr() Siguranța firelor MT-Safe

În Linux, mq_getattr() și mq_setattr() sunt funcții de bibliotecă suprapuse peste apelul de sistem mq_getsetattr(2).

POSIX.1-2008.

POSIX.1-2001.

Programul de mai jos poate fi utilizat pentru a arăta valorile implicite mq_maxmsg și mq_msgsize care sunt atribuite unei cozi de așteptare a mesajelor care este creată cu un apel la mq_open(3) în care argumentul attr este NULL. Iată un exemplu de execuție a programului:


$ ./a.out /testq
Numărul maxim de mesaje din coada de așteptare:   10
Dimensiunea maximă a mesajului:                   8192

Începând cu Linux 3.5, următoarele fișiere /proc (descrise în mq_overview(7)) pot fi utilizate pentru a controla valorile implicite:


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

#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, "Utilizare: %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("Numărul maxim de mesaje din coada de așteptare:   %ld\n", attr.mq_maxmsg);
    printf("Dimensiunea maximă a mesajului:                   %ld\n", attr.mq_msgsize);
    if (mq_unlink(argv[1]) == -1)
        errExit("mq_unlink");
    exit(EXIT_SUCCESS);
}

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

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

31 octombrie 2023 Pagini de manual de Linux 6.06