Provided by:
manpages-pl-dev_20060617-1_all 
NAZWA
msgget - pobranie identyfikatora kolejki komunikatów
SKŁADNIA
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgget(key_t key, int msgflg);
OPIS
Funkcja zwraca identyfikator kolejki komunikatów skojarzonej z
wartością parametru key. Jeśli key ma wartość IPC_PRIVATE lub jeśli
nie istnieje kolejka o zadanym kluczu key, a w parametrze msgflg
zostanie przekazany znacznik IPC_CREAT (tzn. msgflg&IPC_CREAT będzie
różne od zera), to zostanie utworzona nowa kolejka. Obecność
znaczników IPC_CREAT i IPC_EXCL w parametrze msgflg ma to samo
znaczenie, jeśli chodzi o istnienie kolejki komunikatów, co obecność
znaczników O_CREAT i O_EXCL w argumencie mode funkcji systemowej
open(2): tzn. funkcja msgget nie wykona się prawidłowo, jeśli msgflg
będzie zawierać jednocześnie oba znaczniki IPC_CREAT i IPC_EXCL, zaś
kolejka komunikatów skojarzona z key już będzie istnieć.
Podczas tworzenia, dziewięć najmniej znaczących bitów argumentu msgflg
definiuje prawa dostępu do kolejki. Prawa te mają one taką samą postać
i znaczenie (semantykę) jak parametr funkcji systemowych open(2) i
creat(2) określający prawa dostępu. (Prawa do uruchamiania nie są
używane.)
Jeśli tworzona jest nowa kolejka komunikatów, wywołanie to w
następujący sposób inicjalizuje strukturę danych msqid_ds opisującą
systemową kolejkę komunikatów:
msg_perm.cuid i msg_perm.uid przyjmują wartość efektywnego
identyfikatora właściciela procesu wywołującego.
msg_perm.cgid i msg_perm.gid przyjmują wartość efektywnego
identyfikatora grupy procesu wywołującego.
9 najmniej znaczących bitów pola msg_perm.mode jest kopiowanych
z 9 najmniej znaczących bitów msgflg.
msg_qnum, msg_lspid, msg_lrpid, msg_stime i msg_rtime przyjmują
wartość 0.
msg_ctime jest ustawiane na aktualny czas.
msg_qbytes przyjmuje wartość równą ograniczeniu systemowemu
MSGMNB.
Jeśli kolejka istnieje to prawa dostępu są weryfikowane i system
sprawdza, czy kolejka nie jest przeznaczona do usunięcia.
WARTOŚĆ ZWRACANA
W przypadku pomyślnego zakończenia, funkcja zwraca identyfikator
kolejki komunikatów (liczbę nieujemną), a w przeciwnym przypadku zwraca
-1 i przypisuje zmiennej errno stosowną wartość.
BŁĘDY
W przypadku niepowodzenia, zmienna errno może przyjąć jedną z
następujących wartości:
EACCES Kolejka skojarzona z key, istnieje, ale proces wywołujący
funkcję nie ma wystarczających praw dostępu do tej kolejki.
EEXIST Kolejka skojarzona z wartością key istnieje a msgflg zawiera
jednocześnie oba znaczniki IPC_CREAT i IPC_EXCL.
ENOENT Kolejka skojarzona z wartością key nie istnieje, zaś msgflg
nie zawiera flagi IPC_CREAT.
ENOMEM Kolejka komunikatów powinna zostać utworzona, ale w systemie
brak jest pamięci na utworzenie nowej struktury danych.
ENOSPC Kolejka komunikatów powinna zostać utworzona, ale
przekroczone zostałoby systemowe ograniczenie (MSGMNI) na
ilość istniejących kolejek komunikatów.
UWAGI
IPC_PRIVATE nie jest znacznikiem tylko szczególną wartością typu key_t.
Jeśli wartość ta zostanie użyta jako parametr key, to system uwzględni
jedynie 9 najniższych bitów parametru msgflg, stanowiących bity
uprawnień, i (w razie powodzenia) utworzy nową kolejkę.
Wywołania msgget dotyczą następujące ograniczenia systemowe:
MSGMNI Maksymalna liczba kolejek komunikatów w systemie: zależne od
lokalnej strategii (policy dependent).
USTERKI
Wybrana nazwa, IPC_PRIVATE, prawdopodobnie nie jest najszczęśliwsza.
IPC_NEW w sposób bardziej przejrzysty odzwierciedlało by rolę tej
wartości.
ZGODNE Z
SVr4, SVID. Do wersji 2.3.20, Linux zwracał EIDRM dla msgget na
kolejce komunikatów przeznaczonej do skasowania.
ZOBACZ TAKŻE
ftok(3), ipc(5), msgctl(2), msgsnd(2), msgrcv(2).