msgget
pobranie identyfikatora kolejki komunikatów
1. msgget.2.man
Manpage of MSGGET
MSGGET
Section: Podręcznik programisty Linuksa (2)Updated: 1993-11-01
Index Return to Main Contents
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).
Index
This document was created by man2html using the manual pages.
Time: 17:40:42 GMT, May 11, 2012


