Rechercher une page de manuel
msgget
Langue: pl
Version: 1993-11-01 (openSuse - 09/10/07)
Section: 2 (Appels système)
NAZWA
msgget - pobranie identyfikatora kolejki komunikatówSK£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).Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre