Man page - mq_open(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

mq_open

NUME
BIBLIOTECA
SINOPSIS
DESCRIERE
VALOAREA RETURNATĂ
ERORI-IEȘIRE
ATRIBUTE
VERSIUNI
Diferențe între biblioteca C și nucleu
STANDARDE
ISTORIC
ERORI
CONSULTAȚI ȘI
TRADUCERE

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

Image grohtml-656034-1.png

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 .