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/.