MSGGET(2)

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

INFORMACJE O TŁUMACZENIU
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/.