mq_getattr(3) Library Functions Manual mq_getattr(3) NUME mq_getattr, mq_setattr - obine/stabilete atributele cozii de mesaje BIBLIOTECA Biblioteca de timp real (librt, -lrt) SINOPSIS #include 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, modifica atributele cozii de ateptare a mesajelor la care se face referire prin descriptorul cozii de ateptare a mesajelor mqdes. mq_getattr() returneaza o structura mq_attr in memoria tampon indicata de attr. Aceasta structura se definete astfel: struct mq_attr { long mq_flags; /* Fanioane: 0 sau O_NONBLOCK */ long mq_maxmsg; /* Numarul maxim de mesaje in coada */ long mq_msgsize; /* Dimensiunea maxima a mesajului (octei)) */ long mq_curmsgs; /* Numarul de mesaje aflate in prezent in coada */ }; Campul mq_flags conine fanioanele asociate cu descrierea cozii de mesaje deschise. Acest camp este iniializat atunci cand coada este creata de mq_open(3). Singurul fanion care poate aparea in acest camp este O_NONBLOCK. Campurile mq_maxmsg i mq_msgsize sunt stabilite atunci cand coada de mesaje este creata de mq_open(3). Campul mq_maxmsg reprezinta o limita superioara a numarului de mesaje care pot fi plasate in coada de ateptare cu ajutorul mq_send(3). Campul mq_msgsize este o limita superioara a dimensiunii mesajelor care pot fi plasate in coada de ateptare. Ambele campuri trebuie sa aiba o valoare mai mare decat zero. Doua fiiere /proc care impun plafoane pentru valorile acestor campuri sunt descrise in mq_overview(7). Campul mq_curmsgs returneaza numarul de mesaje aflate in prezent in coada de ateptare. mq_setattr() stabilete atributele cozii de mesaje utilizand informaiile furnizate in structura mq_attr indicata de newattr. Singurul atribut care poate fi modificat este stabilirea fanionului O_NONBLOCK din mq_flags. Celelalte campuri din newattr sunt ignorate. In cazul in care campul oldattr nu este NULL, atunci memoria tampon la care indica este utilizata pentru a returna o structura mq_attr care conine aceleai informaii ca cele returnate de mq_getattr(). VALOAREA RETURNATA In caz de succes, mq_getattr() i mq_setattr() returneaza 0; in caz de eroare, se returneaza -1, cu errno configurata pentru a indica eroarea. ERORI-IEIRE EBADF Descriptorul de coada de mesaje specificat in mqdes nu este valid. EINVAL newattr->mq_flags coninea ali bii activai decat O_NONBLOCK. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |mq_getattr(), mq_setattr() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ VERSIUNI In Linux, mq_getattr() i mq_setattr() sunt funcii de biblioteca 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 arata valorile implicite mq_maxmsg i mq_msgsize care sunt atribuite unei cozi de ateptare a mesajelor care este creata cu un apel la mq_open(3) in care argumentul attr este NULL. Iata un exemplu de execuie a programului: $ ./a.out /testq Numarul maxim de mesaje din coada de ateptare: 10 Dimensiunea maxima a mesajului: 8192 Incepand cu Linux 3.5, urmatoarele fiiere /proc (descrise in 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 #include #include #include #include #include #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("Numarul maxim de mesaje din coada de ateptare: %ld\n", attr.mq_maxmsg); printf("Dimensiunea maxima a mesajului: %ld\n", attr.mq_msgsize); if (mq_unlink(argv[1]) == -1) errExit("mq_unlink"); exit(EXIT_SUCCESS); } CONSULTAI I mq_close(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 15 iunie 2024 mq_getattr(3)