Scroll to navigation

mq_getattr(3) Library Functions Manual mq_getattr(3)

NUME

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

BIBLIOTECA

Biblioteca de timp real (librt, -lrt)

REZUMAT

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

DESCRIERE

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().

VALOAREA RETURNATĂ

Î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.

ERORI-IEȘIRE

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.

ATRIBUTE

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

VERSIUNI

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

STANDARDE

POSIX.1-2008.

ISTORIC

POSIX.1-2001.

EXEMPLE

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

Sursa programului

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

CONSULTAȚI ȘI

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

TRADUCERE

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.

20 iulie 2023 Pagini de manual de Linux 6.05.01