Provided by: manpages-ro-dev_4.28.0-2_all 

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ță │ Atribut │ Valoare │
├─────────────────────────────────────────────────────────────────────────┼───────────────────┼─────────┤
│ 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)