Provided by: manpages-pl-dev_20060617-1_all bug

NAZWA

       msgget - pobranie identyfikatora kolejki komunikatów

SKŁADNIA

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>

       int msgget(key_t key, int msgflg);

OPIS

       Funkcja   zwraca   identyfikator   kolejki  komunikatów  skojarzonej  z
       wartością parametru key.  Jeśli key ma wartość  IPC_PRIVATE  lub  jeśli
       nie  istnieje  kolejka  o  zadanym  kluczu  key,  a w parametrze msgflg
       zostanie przekazany znacznik IPC_CREAT (tzn.   msgflg&IPC_CREAT  będzie
       różne   od   zera),  to  zostanie  utworzona  nowa  kolejka.   Obecność
       znaczników  IPC_CREAT  i  IPC_EXCL  w  parametrze  msgflg  ma  to  samo
       znaczenie,  jeśli  chodzi  o istnienie kolejki komunikatów, co obecność
       znaczników O_CREAT  i  O_EXCL  w  argumencie  mode  funkcji  systemowej
       open(2):  tzn.  funkcja  msgget nie wykona się prawidłowo, jeśli msgflg
       będzie zawierać jednocześnie oba znaczniki IPC_CREAT  i  IPC_EXCL,  zaś
       kolejka komunikatów skojarzona z key już będzie istnieć.

       Podczas  tworzenia, dziewięć najmniej znaczących bitów argumentu msgflg
       definiuje prawa dostępu do kolejki.  Prawa te mają one taką samą postać
       i  znaczenie  (semantykę)  jak  parametr  funkcji systemowych open(2) i
       creat(2) określający prawa  dostępu.  (Prawa  do  uruchamiania  nie  są
       używane.)

       Jeśli   tworzona   jest   nowa  kolejka  komunikatów,  wywołanie  to  w
       następujący sposób inicjalizuje  strukturę  danych  msqid_ds  opisującą
       systemową kolejkę komunikatów:

              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 aktualny czas.

              msg_qbytes  przyjmuje  wartość  równą  ograniczeniu  systemowemu
              MSGMNB.

       Jeśli kolejka istnieje  to  prawa  dostępu  są  weryfikowane  i  system
       sprawdza, 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 skojarzona z key, istnieje,  ale  proces  wywołujący
                  funkcję  nie ma wystarczających praw dostępu do tej kolejki.

       EEXIST     Kolejka skojarzona z wartością key istnieje a msgflg zawiera
                  jednocześnie oba znaczniki IPC_CREAT i IPC_EXCL.

       ENOENT     Kolejka  skojarzona z wartością key nie istnieje, zaś msgflg
                  nie zawiera flagi IPC_CREAT.

       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
                  ilość istniejących kolejek komunikatów.

UWAGI

       IPC_PRIVATE nie jest znacznikiem tylko 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,  stanowiących  bity
       uprawnień, i (w razie powodzenia) utworzy nową kolejkę.

       Wywołania msgget dotyczą następujące ograniczenia systemowe:

       MSGMNI     Maksymalna liczba kolejek komunikatów w systemie: zależne od
                  lokalnej strategii (policy dependent).

USTERKI

       Wybrana  nazwa,  IPC_PRIVATE,  prawdopodobnie nie jest najszczęśliwsza.
       IPC_NEW w sposób  bardziej  przejrzysty  odzwierciedlało  by  rolę  tej
       wartości.

ZGODNE Z

       SVr4,  SVID.   Do  wersji  2.3.20,  Linux  zwracał  EIDRM dla msgget na
       kolejce komunikatów przeznaczonej do skasowania.

ZOBACZ TAKŻE

       ftok(3), ipc(5), msgctl(2), msgsnd(2), msgrcv(2).