Provided by: manpages-pl-dev_0.5-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 Kolejka  skojarzona  z  wartością  key istnieje, a w msgflg podano jednocześnie oba
              znaczniki IPC_CREAT i IPC_EXCL.

       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

       SVr4, POSIX.1-2001.

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 Maksymalna liczba kolejek komunikatów w  systemie:  wartość  zależna  od  lokalnych
              ustawień  (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  3.52  projektu  Linux  man-pages.  Opis
       projektu   oraz   informacje   dotyczące  zgłaszania  błędów  można  znaleźć  pod  adresem
       http://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ą   3.52
       oryginału.