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¶
 Uwaga! To tłumaczenie może być nieaktualne!
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).
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
  Tłumaczenia Manuali i 
może nie być aktualne. W razie
  zauważenia różnic między powyższym opisem a
  rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
  zapoznanie się z oryginalną (angielską) wersją strony
  podręcznika za pomocą polecenia:
  
  - man --locale=C 2 msgget
 
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
  znaleźć pod adresem
  
http://sourceforge.net/projects/manpages-pl/.