msgget(2) System Calls Manual msgget(2) NAZWA msgget - pobranie identyfikatora kolejki komunikatow Systemu V BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int msgget(key_t key, int msgflg); OPIS The msgget() system call returns the System V message queue identifier associated with the value of the key argument. It may be used either to obtain the identifier of a previously created message queue (when msgflg is zero and key does not have the value IPC_PRIVATE), or to create a new set. A new message queue is created if key has the value IPC_PRIVATE or key isn't IPC_PRIVATE, no message queue with the given key key exists, and IPC_CREAT is specified in msgflg. Jesli w parametrze msgflg podano zarowno IPC_CREAT, jak i IPC_EXCL oraz juz istnieje kolejka komunikatow o kluczu key, to msgget() konczy sie bledem, ustawiajac errno na wartosc EEXIST. (Dziala to analogicznie do O_CREAT | O_EXCL w open(2)). Podczas tworzenia kolejki najmniej znaczace bity argumentu msgflg definiuja prawa dostepu do niej. Prawa te maja taka sama postac i znaczenie (semantyke) jak prawa dostepu podawane w parametrze mode wywolania open(2) (Prawa do uruchamiania nie sa uzywane). Jesli tworzona jest nowa kolejka komunikatow, wywolanie to w nastepujacy sposob inicjuje strukture danych msqid_ds (patrz msgctl(2)): o msg_perm.cuid i msg_perm.uid przyjmuja wartosc efektywnego identyfikatora wlasciciela procesu wywolujacego. o msg_perm.cgid i msg_perm.gid przyjmuja wartosc efektywnego identyfikatora grupy procesu wywolujacego. o 9 najmniej znaczacych bitow pola msg_perm.mode jest kopiowanych z 9 najmniej znaczacych bitow msgflg. o msg_qnum, msg_lspid, msg_lrpid, msg_stime i msg_rtime przyjmuja wartosc 0. o msg_ctime jest ustawiane na biezacy czas. o msg_qbytes przyjmuje wartosc rowna ograniczeniu systemowemu MSGMNB. Jesli kolejka juz istnieje, to sa weryfikowane uprawnienia i jest sprawdzane, czy kolejka nie jest przeznaczona do usuniecia. WARTOSC ZWRACANA On success, msgget() returns the message queue identifier (a nonnegative integer). On failure, -1 is returned, and errno is set to indicate the error. BLEDY EACCES A message queue exists for key, but the calling process does not have permission to access the queue, and does not have the CAP_IPC_OWNER capability in the user namespace that governs its IPC namespace. EEXIST IPC_CREAT i IPC_EXCL okreslono w msgflg, lecz kolejka wiadomosci dla key juz istnieje. ENOENT Kolejka skojarzona z wartoscia key nie istnieje oraz nie podano flagi IPC_CREAT w msgflg. ENOMEM Kolejka komunikatow powinna zostac utworzona, ale w systemie brak jest pamieci na utworzenie nowej struktury danych. ENOSPC Kolejka komunikatow powinna zostac utworzona, ale przekroczone zostaloby systemowe ograniczenie (MSGMNI) na liczbe istniejacych kolejek komunikatow. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, SVr4. Linux Until Linux 2.3.20, Linux would return EIDRM for a msgget() on a message queue scheduled for deletion. UWAGI IPC_PRIVATE nie jest znacznikiem, ale szczegolna wartoscia typu key_t. Jesli wartosc ta zostanie uzyta jako parametr key, to system uwzgledni jedynie 9 najnizszych bitow parametru msgflg i (w razie powodzenia) utworzy nowa kolejke. Nastepujace ograniczenia systemowe dotycza wywolania msgget(): MSGMNI Systemowy limit liczby kolejek komunikatow. Przed Linuksem 3.19 domyslna wartosc limitu obliczano wzorem opartym na dostepnej pamieci systemowej. Od Linuksa 3.19 domyslna wartosc wynosi 32 000. Pod Linuksem to ograniczenie mozna odczytac i zmienic, uzywajac pliku /proc/sys/kernel/msgmni. USTERKI Nazwa IPC_PRIVATE prawdopodobnie nie jest najszczesliwsza. IPC_NEW w sposob bardziej przejrzysty odzwierciedlaloby role tej wartosci. ZOBACZ TAKZE msgctl(2), msgrcv(2), msgsnd(2), ftok(3), capabilities(7), mq_overview(7), sysvipc(7) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Rafal Lewczuk , Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. msgget(2)