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

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)