msgget(2) System Calls Manual msgget(2) NUME msgget - obine un identificator de coada de mesaje System V BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include int msgget(key_t key, int msgflg); DESCRIERE Apelul de sistem msgget() returneaza identificatorul cozii de mesaje System V asociat cu valoarea argumentului key. Acesta poate fi utilizat fie pentru a obine identificatorul unei cozi de mesaje create anterior (atunci cand msgflg este zero i key nu are valoarea IPC_PRIVATE), fie pentru a crea un set nou. O noua coada de mesaje este creata daca key are valoarea IPC_PRIVATE sau daca key nu este IPC_PRIVATE, daca nu exista o coada de mesaje cu cheia key data i daca IPC_CREAT este specificat in msgflg. Daca msgflg specifica atat IPC_CREAT, cat i IPC_EXCL i exista deja o coada de mesaje pentru key, atunci msgget() eueaza cu errno configurata la EEXIST; (acest lucru este analog cu efectul combinaiei O_CREAT | O_EXCL pentru open(2)). La creare, cei mai puin semnificativi bii ai argumentului msgflg definesc permisiunile cozii de mesaje. Aceti bii de permisiune au acelai format i semantica ca i permisiunile specificate pentru argumentul mode din open(2); (permisiunile de execuie nu sunt utilizate). Daca este creata o noua coada de mesaje, atunci structura de date asociata msqid_ds (a se vedea msgctl(2)) este iniializata dupa cum urmeaza: o msg_perm.cuid i msg_perm.uid sunt stabilite la ID-ul de utilizator efectiv al procesului de apelare. o msg_perm.cgid i msg_perm.gid sunt stabilite la ID-ul de grup efectiv al procesului apelant. o Cei mai puin semnificativi 9 bii din msg_perm.mode sunt stabilii la cei mai puin semnificativi 9 bii din msgflg. o msg_qnum, msg_lspid, msg_lrpid, msg_stime, i msg_rtime sunt stabilite la 0. o msg_ctime este stabilit la ora curenta. o msg_qbytes este stabilit la limita sistemului MSGMNB. In cazul in care coada de mesaje exista deja, se verifica permisiunile i se verifica daca aceasta este marcata pentru distrugere. VALOAREA RETURNATA In caz de succes, msgget() returneaza identificatorul cozii de ateptare a mesajelor (un numar intreg nenegativ). In caz de eec, se returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EACCES Exista o coada de mesaje pentru key, dar procesul apelant nu are permisiunea de a accesa coada de ateptare i nu are capacitatea CAP_IPC_OWNER in spaiul de nume al utilizatorului care guverneaza spaiul de nume IPC. EEXIST IPC_CREAT i IPC_EXCL au fost specificate in msgflg, dar exista deja o coada de mesaje pentru key. ENOENT Nu exista o coada de mesaje pentru key i msgflg nu a specificat IPC_CREAT. ENOMEM Trebuie creata o coada de mesaje, dar sistemul nu are suficienta memorie pentru noua structura de date. ENOSPC Trebuie creata o coada de mesaje, dar limita sistemului pentru numarul maxim de cozi de mesaje (MSGMNI) ar fi depaita. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4. Linux Pana la Linux 2.3.20, Linux ar fi returnat EIDRM pentru un msgget() pe o coada de mesaje programata pentru tergere. NOTE IPC_PRIVATE nu este un camp fanion, ci un tip key_t. In cazul in care se utilizeaza aceasta valoare speciala pentru key, apelul de sistem ignora totul, cu excepia celor mai puin semnificativi 9 bii din msgflg i creeaza o noua coada de mesaje (in caz de succes). Urmatoarea este o limita de sistem privind resursele de coada de mesaje care afecteaza un apel msgget(): MSGMNI Limita la nivel de sistem a numarului de cozi de mesaje. Inainte de Linux 3.19, valoarea implicita pentru aceasta limita era calculata cu ajutorul unei formule bazate pe memoria disponibila a sistemului. Incepand cu Linux 3.19, valoarea implicita este de 32.000. In Linux, aceasta limita poate fi citita i modificata prin intermediul /proc/sys/kernel/msgmni. ERORI Alegerea denumirii IPC_PRIVATE a fost poate o alegere greita, IPC_NEW ar fi aratat mai clar funcia sa. CONSULTAI I msgctl(2), msgrcv(2), msgsnd(2), ftok(3), capabilities(7), mq_overview(7), sysvipc(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.06 31 octombrie 2023 msgget(2)