Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       mq_open - deschide o coadă de mesaje

BIBLIOTECA

       Biblioteca de timp real (librt, -lrt)

SINOPSIS

       #include <fcntl.h>           /* Pentru constantele O_* */
       #include <sys/stat.h>        /* Pentru constantele de mod */
       #include <mqueue.h>

       mqd_t mq_open(const char *nume, int oflag);
       mqd_t mq_open(const char *nume, int oflag, mode_t mode,
                     struct mq_attr *attr);

DESCRIERE

       mq_open()  creează  o  nouă coadă de mesaje POSIX sau deschide o coadă existentă. Coada este identificată
       prin nume. Pentru detalii despre construcția lui nume, consultați mq_overview(7).

       Argumentul oflag specifică fanioanele care  controlează  funcționarea  apelului;  (definițiile  valorilor
       fanioanelor  pot  fi  obținute  prin includerea <fcntl.h>). În oflag trebuie specificat exact unul dintre
       următoarele:

       O_RDONLY
              Deschide coada numai pentru a primi mesaje.

       O_WRONLY
              Deschide coada numai pentru a trimite mesaje.

       O_RDWR Deschide coada pentru a trimite și a primi mesaje.

       Zero sau mai multe dintre următoarele fanioane pot fi adăugate cu operatorul OR în oflag:

       O_CLOEXEC (începând cu Linux 2.6.26)
              Activează fanionul close-on-exec pentru descriptorul cozii de mesaje.  Consultați open(2) pentru a
              afla de ce este util acest fanion.

       O_CREAT
              Creează coada de mesaje dacă aceasta nu există. Proprietarul (ID utilizator) cozii de mesaje  este
              stabilit  la  ID-ul  utilizatorului  efectiv al procesului apelant. Grupul proprietar (ID de grup)
              este stabilit la ID-ul de grup efectiv al procesului apelant.

       O_EXCL Dacă O_CREAT a fost specificat în oflag, iar o coadă  cu  numele  nume  dat  există  deja,  atunci
              eșuează cu eroarea EEXIST.

       O_NONBLOCK
              Deschide coada în modul neblocant. În situațiile în care mq_receive(3) și mq_send(3) s-ar bloca în
              mod normal, aceste funcții eșuează cu eroarea EAGAIN.

       Dacă  O_CREAT  este specificat în oflag, atunci trebuie furnizate două argumente suplimentare. Argumentul
       mode specifică permisiunile care urmează să fie plasate pe noua coadă, ca  pentru  open(2);  (definițiile
       simbolice  pentru  biții  de  permisiuni  pot  fi  obținute  prin  includerea  <sys/stat.h>). Definițiile
       permisiunilor sunt mascate față de umask-ul procesului.

       Câmpurile din struct mq_attr indicată de attr specifică numărul maxim de mesaje și dimensiunea  maximă  a
       mesajelor pe care coada le va permite. Această structură este definită după cum urmează:

           struct mq_attr {
               long mq_flags;       /* Fanioane (ignorate pentru mq_open()) */
               long mq_maxmsg;      /* Nr. maxim de mesaje în coadă */
               long mq_msgsize;     /* Dimensiunea maximă a mesajului (octeți) */
               long mq_curmsgs;     /* Nr. de mesaje aflate în prezent în coadă
                                       (ignorat pentru mq_open()) */
           };

       Numai  câmpurile  mq_maxmsg  și mq_msgsize sunt utilizate atunci când se apelează mq_open(); valorile din
       celelalte câmpuri sunt ignorate.

       Dacă attr este NULL, atunci coada este creată cu atribute implicite definite de implementare. Începând cu
       Linux 3.5, pot fi utilizate două fișiere /proc pentru a  controla  aceste  valori  implicite;  consultați
       mq_overview(7) pentru detalii.

VALOAREA RETURNATĂ

       În  caz  de  succes,  mq_open()  returnează un descriptor al cozii de mesaje pentru a fi utilizat de alte
       funcții ale cozii de mesaje. În caz de eroare, mq_open()  returnează  (mqd_t) -1,  cu  errno  configurată
       pentru a indica eroarea.

ERORI-IEȘIRE

       EACCES Coada există, dar apelantul nu are permisiunea de a o deschide în modul specificat.

       EACCES nume conține mai mult de o bară oblică.

       EEXIST Atât O_CREAT cât și O_EXCL au fost specificate în oflag, dar o coadă cu acest nume există deja.

       EINVAL nume nu respectă formatul din mq_overview(7).

       EINVAL O_CREAT a fost specificat în oflag, iar attr nu era NULL, dar attr->mq_maxmsg sau attr->mq_msqsize
              nu  era  valid.  Ambele  câmpuri  trebuie să fie mai mari decât zero. Într-un proces neprivilegiat
              (care nu are capacitatea CAP_SYS_RESOURCE), attr->mq_maxmsg trebuie să fie mai  mic  sau  egal  cu
              limita  msg_max,  iar  attr->mq_msgsize  trebuie să fie mai mic sau egal cu limita msgsize_max. În
              plus, chiar și într-un proces  privilegiat,  attr->mq_maxmsg  nu  poate  depăși  limita  HARD_MAX;
              (consultați mq_overview(7) pentru detalii despre aceste limite).

       EMFILE A  fost  atinsă  limita  per-proces  a  numărului  de  descriptori de fișiere și de cozi de mesaje
              deschise (a se vedea descrierea RLIMIT_NOFILE în getrlimit(2)).

       ENAMETOOLONG
              nume era prea lung.

       ENFILE A fost atinsă limita la nivel de sistem privind  numărul  total  de  fișiere  și  cozi  de  mesaje
              deschise.

       ENOENT Fanionul O_CREAT nu a fost specificat în oflag și nu există nicio coadă cu acest nume.

       ENOENT nume era doar „/” urmat de niciun alt caracter.

       ENOMEM Memorie insuficientă.

       ENOSPC Spațiu  insuficient  pentru  crearea  unei  noi cozi de mesaje. Acest lucru s-a întâmplat probabil
              pentru că s-a atins limita queues_max; a se vedea mq_overview(7).

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────┬───────────────────┬─────────┐
       │ InterfațăAtributValoare │
       ├─────────────────────────────────────────────────────────────────────────┼───────────────────┼─────────┤
       │ mq_open()                                                               │ Siguranța firelor │ MT-Safe │
       └─────────────────────────────────────────────────────────────────────────┴───────────────────┴─────────┘

VERSIUNI

   Diferențe între biblioteca C și nucleu
       Funcția de bibliotecă mq_open() este implementată peste un apel de sistem cu  același  nume.  Funcția  de
       bibliotecă  verifică  dacă  nume  începe  cu  o  bară oblică (/), generând eroarea EINVAL în caz contrar.
       Apelul de sistem al nucleului se așteaptă ca nume să nu conțină  nicio  bară  oblică  anterioară,  astfel
       încât  funcția  de bibliotecă C transmite nume fără bara oblică anterioară (adică nume+1) către apelul de
       sistem.

STANDARDE

       POSIX.1-2008.

ISTORIC

       POSIX.1-2001.

ERORI

       Înainte de Linux 2.6.14, umask-ul procesului nu era aplicat permisiunilor specificate în mode.

CONSULTAȚI ȘI

       mq_close(3), mq_getattr(3), mq_notify(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.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                         mq_open(3)