mq_open(3) Library Functions Manual mq_open(3) NUME mq_open - deschide o coada de mesaje BIBLIOTECA Biblioteca de timp real (librt, -lrt) SINOPSIS #include /* Pentru constantele O_* */ #include /* Pentru constantele de mod */ #include 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() creeaza o noua coada de mesaje POSIX sau deschide o coada existenta. Coada este identificata prin nume. Pentru detalii despre construcia lui nume, consultai mq_overview(7). Argumentul oflag specifica fanioanele care controleaza funcionarea apelului; (definiiile valorilor fanioanelor pot fi obinute prin includerea ). In oflag trebuie specificat exact unul dintre urmatoarele: 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 urmatoarele fanioane pot fi adaugate cu operatorul OR in oflag: O_CLOEXEC (incepand cu Linux 2.6.26) Activeaza fanionul close-on-exec pentru descriptorul cozii de mesaje. Consultai open(2) pentru a afla de ce este util acest fanion. O_CREAT Creeaza coada de mesaje daca aceasta nu exista. 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 Daca O_CREAT a fost specificat in oflag, iar o coada cu numele nume dat exista deja, atunci eueaza cu eroarea EEXIST. O_NONBLOCK Deschide coada in modul neblocant. In situaiile in care mq_receive(3) i mq_send(3) s-ar bloca in mod normal, aceste funcii eueaza cu eroarea EAGAIN. Daca O_CREAT este specificat in oflag, atunci trebuie furnizate doua argumente suplimentare. Argumentul mode specifica permisiunile care urmeaza sa fie plasate pe noua coada, ca pentru open(2); (definiiile simbolice pentru biii de permisiuni pot fi obinute prin includerea ). Definiiile permisiunilor sunt mascate faa de umask-ul procesului. Campurile din struct mq_attr indicata de attr specifica numarul maxim de mesaje i dimensiunea maxima a mesajelor pe care coada le va permite. Aceasta structura este definita dupa cum urmeaza: struct mq_attr { long mq_flags; /* Fanioane (ignorate pentru mq_open()) */ long mq_maxmsg; /* Nr. maxim de mesaje in coada */ long mq_msgsize; /* Dimensiunea maxima a mesajului (octei) */ long mq_curmsgs; /* Nr. de mesaje aflate in prezent in coada (ignorat pentru mq_open()) */ }; Numai campurile mq_maxmsg i mq_msgsize sunt utilizate atunci cand se apeleaza mq_open(); valorile din celelalte campuri sunt ignorate. Daca attr este NULL, atunci coada este creata cu atribute implicite definite de implementare. Incepand cu Linux 3.5, pot fi utilizate doua fiiere /proc pentru a controla aceste valori implicite; consultai mq_overview(7) pentru detalii. VALOAREA RETURNATA In caz de succes, mq_open() returneaza un descriptor al cozii de mesaje pentru a fi utilizat de alte funcii ale cozii de mesaje. In caz de eroare, mq_open() returneaza (mqd_t) -1, cu errno configurata pentru a indica eroarea. ERORI-IEIRE EACCES Coada exista, dar apelantul nu are permisiunea de a o deschide in modul specificat. EACCES nume conine mai mult de o bara oblica. EEXIST Atat O_CREAT cat i O_EXCL au fost specificate in oflag, dar o coada cu acest nume exista deja. EINVAL nume nu respecta formatul din mq_overview(7). EINVAL O_CREAT a fost specificat in oflag, iar attr nu era NULL, dar attr->mq_maxmsg sau attr->mq_msqsize nu era valid. Ambele campuri trebuie sa fie mai mari decat zero. Intr-un proces neprivilegiat (care nu are capacitatea CAP_SYS_RESOURCE), attr->mq_maxmsg trebuie sa fie mai mic sau egal cu limita msg_max, iar attr->mq_msgsize trebuie sa fie mai mic sau egal cu limita msgsize_max. In plus, chiar i intr-un proces privilegiat, attr->mq_maxmsg nu poate depai limita HARD_MAX; (consultai mq_overview(7) pentru detalii despre aceste limite). EMFILE A fost atinsa limita per-proces a numarului de descriptori de fiiere i de cozi de mesaje deschise (a se vedea descrierea RLIMIT_NOFILE in getrlimit(2)). ENAMETOOLONG nume era prea lung. ENFILE A fost atinsa limita la nivel de sistem privind numarul total de fiiere i cozi de mesaje deschise. ENOENT Fanionul O_CREAT nu a fost specificat in oflag i nu exista nicio coada cu acest nume. ENOENT nume era doar ,,/" urmat de niciun alt caracter. ENOMEM Memorie insuficienta. ENOSPC Spaiu insuficient pentru crearea unei noi cozi de mesaje. Acest lucru s-a intamplat probabil pentru ca s-a atins limita queues_max; a se vedea mq_overview(7). ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |mq_open() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ VERSIUNI Diferene intre biblioteca C i nucleu Funcia de biblioteca mq_open() este implementata peste un apel de sistem cu acelai nume. Funcia de biblioteca verifica daca nume incepe cu o bara oblica (/), generand eroarea EINVAL in caz contrar. Apelul de sistem al nucleului se ateapta ca nume sa nu conina nicio bara oblica anterioara, astfel incat funcia de biblioteca C transmite nume fara bara oblica anterioara (adica nume+1) catre apelul de sistem. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001. ERORI Inainte de Linux 2.6.14, umask-ul procesului nu era aplicat permisiunilor specificate in mode. CONSULTAI I mq_close(3), mq_getattr(3), mq_notify(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.12 23 iulie 2024 mq_open(3)