Provided by: manpages-pl-dev_4.15.0-9_all bug

NAZWA

       msgget - pobranie identyfikatora kolejki komunikatów Systemu V

SKŁADNIA

       #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

       On success, msgget()  returns the message queue identifier (a  nonnegative  integer).   On
       failure, -1 is returned, and errno is set to indicate the error.

BŁĘDY

       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

       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.13  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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.