Provided by: manpages-pl-dev_0.7-1_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

       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.