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)
SINOPSIS
#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
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.
2 mai 2024 | Pagini de manual de Linux 6.8 |