Provided by: manpages-pl-dev_0.7-2_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
Wywołanie systemowe msgget() zwraca identyfikator kolejki komunikatów Systemu V skojarzony z wartością
argumentu key. Tworzy nową kolejkę komunikatów, gdy key ma wartość IPC_PRIVATE lub gdy key jest różny od
IPC_PRIVATE i nie istnieje kolejka o kluczu podanym w key, a w parametrze msgflg ustawiono IPC_CREAT.
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 Kolejka komunikatów skojarzona z key istnieje, jednakże proces wywołujący funkcję nie ma ani
wystarczających praw dostępu do tej kolejki, ani nie ma ustawionego atrybutu CAP_IPC_OWNER.
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.
USTERKI
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), svipc(7)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 4.07 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 man są: Rafał Lewczuk (PTM)
<R.Lewczuk@elka.pw.edu.p>, Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda
<robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 4.07 oryginału.
Linux 2015-08-08 MSGGET(2)