Man page - mq_getattr(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

mq_getattr

NUME
BIBLIOTECA
SINOPSIS
DESCRIERE
VALOAREA RETURNATĂ
ERORI-IEȘIRE
ATRIBUTE
VERSIUNI
STANDARDE
ISTORIC
EXEMPLE
Sursa programului
CONSULTAȚI ȘI
TRADUCERE

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

EBADF

Descriptorul de coadă de mesaje specificat în mqdes nu este valid.

EINVAL

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

Image grohtml-658428-1.png

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 .