oracular (2) msgget.2.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       msgget - pobiera identyfikator kolejki komunikatów Systemu V

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #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. Może posłużyć do uzyskania identyfikatora poprzednio utworzonej kolejki  komunikatów  (gdy
       msgflg wynosi zero, a key nie ma wartości IPC_PRIVATE) lub do utworzenia nowego zestawu.

       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  powodzenia,  msgget()  zwraca identyfikator kolejki komunikatów (liczbę nieujemną). W razie
       wystąpienia błędu zwracane jest -1 i ustawiane errno wskazując błąd.

BŁĘDY

       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 przywileju CAP_IPC_OWNER (ang.
              capatility) w przestrzeni nazw użytkownika, która zarządza jego przestrzenią nazw IPC.

       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.

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001, SVr4.

   Linux
       Do Linuksa 2.3.20 Linux zwracał EIDRM dla msgget() na kolejce komunikatów przeznaczonej do skasowania.

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.

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), sysvipc(7)

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⟩.