MSGGET(2) | Podręcznik programisty Linuksa | MSGGET(2) |
msgget - pobranie identyfikatora kolejki komunikatów Systemu V
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgget(key_t key, int msgflg);
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)):
Jeśli kolejka już istnieje, to są weryfikowane uprawnienia i jest sprawdzane, czy kolejka nie jest przeznaczona do usunięcia.
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ść.
W przypadku niepowodzenia zmienna errno może przyjąć jedną z następujących wartości:
POSIX.1-2001, POSIX.1-2008, SVr4.
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():
Do wersji 2.3.20 Linux zwracał EIDRM dla msgget() na kolejce komunikatów przeznaczonej do skasowania.
Nazwa IPC_PRIVATE prawdopodobnie nie jest najszczęśliwsza. IPC_NEW w sposób bardziej przejrzysty odzwierciedlałoby rolę tej wartości.
msgctl(2), msgrcv(2), msgsnd(2), ftok(3), capabilities(7), mq_overview(7), svipc(7)
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/.
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.
2015-08-08 | Linux |