focal (2) msgget.2.gz

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