Provided by: manpages-pl-dev_4.13-4_all 

NAZWA
msgget - pobranie identyfikatora kolejki komunikatów Systemu V
SKŁADNIA
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
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.
Jeśli w parametrze msgflg podano zarówno IPC_CREAT, jak i IPC_EXCL oraz już istnieje kolejka komunikatów
o kluczu key, to msgget() kończy się błędem, ustawiając errno na wartość EEXIST. (Działa to analogicznie
do O_CREAT | O_EXCL w open(2)).
Podczas tworzenia kolejki najmniej znaczące bity argumentu msgflg definiują prawa dostępu do niej. Prawa
te mają taką samą postać i znaczenie (semantykę) jak prawa dostępu podawane w parametrze mode wywołania
open(2) (Prawa do uruchamiania nie są używane).
Jeśli tworzona jest nowa kolejka komunikatów, wywołanie to w następujący sposób inicjuje strukturę danych
msqid_ds (patrz msgctl(2)):
• 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 bieżący czas.
• msg_qbytes przyjmuje wartość równą ograniczeniu systemowemu MSGMNB.
Jeśli kolejka już istnieje, to są weryfikowane uprawnienia i jest sprawdzane, 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 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 określono w msgflg, lecz kolejka wiadomości dla key już istnieje.
ENOENT Kolejka skojarzona z wartością key nie istnieje oraz nie podano flagi IPC_CREAT w msgflg.
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 liczbę istniejących kolejek komunikatów.
ZGODNE Z
POSIX.1-2001, POSIX.1-2008, SVr4.
UWAGI
Dołączenie <sys/types.h> i <sys/ipc.h> nie jest wymagane na Linuksie ani przez żadną z wersji POSIX.
Jednak niektóre stare implementacje wymagają dołączenia tych plików nagłówkowych, SVID również
dokumentuje ich dołączenie. Aplikacje które mają być przenośne na tego typu stare systemy mogą wymagać
dołączenia omawianych plików nagłówkowych.
IPC_PRIVATE nie jest znacznikiem, ale 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 i (w razie
powodzenia) utworzy nową kolejkę.
Następujące ograniczenia systemowe dotyczą wywołania msgget():
MSGMNI Systemowy limit liczby kolejek komunikatów. Przed Linuksem 3.19 domyślną wartość limitu obliczano
wzorem opartym na dostępnej pamięci systemowej. Od Linuksa 3.19 domyślna wartość wynosi 32 000.
Pod Linuksem to ograniczenie można odczytać i zmienić, używając pliku /proc/sys/kernel/msgmni.
Uwagi linuksowe
Do wersji 2.3.20 Linux zwracał EIDRM dla msgget() na kolejce komunikatów przeznaczonej do skasowania.
BŁĘDY
Nazwa IPC_PRIVATE prawdopodobnie nie jest najszczęśliwsza. IPC_NEW w sposób bardziej przejrzysty
odzwierciedlałoby rolę tej wartości.
ZOBACZ TAKŻE
msgctl(2), msgrcv(2), msgsnd(2), ftok(3), capabilities(7), mq_overview(7), sysvipc(7)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 5.10 projektu Linux man-pages. Opis projektu, informacje
dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem
https://www.kernel.org/doc/man-pages/.
T◈UMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Rafał Lewczuk <R.Lewczuk@elka.pw.edu.p>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach
<michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux 2 sierpnia 2019 r. MSGGET(2)