NAZWA¶
semget - pobranie identyfikatora zestawu semaforów
SKŁADNIA¶
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems,
int semflg);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
Funkcja ta zwraca identyfikator zestawu semaforów, skojarzonego z
parametrem
key. Jeśli
key ma wartość
IPC_PRIVATE lub, gdy z wartością
key nie jest
skojarzony żaden istniejący zestaw semaforów, a w parametrze
semflg został przekazany znacznik
IPC_CREAT (tzn.
semflg &
IPC_CREAT jest niezerowe), to tworzony jest nowy
zestaw semaforów
nsems.
Znaczniki
IPC_CREAT i
IPC_EXCL przekazywane parametrem
semflg pełnią tę samą rolę w obsłudze
semaforów, co
O_CREAT i
O_EXCL w parametrze mode funkcji
systemowej
open(2): np. funkcja
semget zgłosi
błąd, jeśli w
semflg przekazane zostaną obydwa
znaczniki
IPC_CREAT i
IPC_EXCL, zaś zestaw semaforów
identyfikowany kluczem
key już będzie istnieć.
Podczas tworzenia, 9 najmniej znaczących bitów argumentu
semflg
określa prawa dostępu do zestawu semaforów (dla
właściciela, grupy i innych). Prawa dostępu mają ten sam
format i takie samo znaczenie, co parametr mode funkcji systemowych
open(2) i
creat(2) (bity praw uruchamiania nie są istotne
dla semaforów, natomiast bity praw zapisu oznaczają
możliwość zmiany wartości semaforów).
Podczas tworzenia nowego zestawu semaforów
semget inicjalizuje
strukturę
semid_ds związaną z zestawem semaforów w
następujący sposób:
- sem_perm.cuid oraz sem_perm.uid przypisany
zostanie efektywny identyfikator użytkownika procesu
wywołującego.
- sem_perm.cgid oraz sem_perm.gid przypisany
zostanie efektywny identyfikator grupy procesu
wywołującego.
- 9 najmniej znaczącym bitom pola sem_perm.mode
zostaną przypisane ich odpowiedniki z parametru semflg.
- Polu sem_nsems przypisania zostanie, zawarta w
parametrze nsems, liczba semaforów w zestawie.
- sem_otime przyjmie wartość 0.
- sem_ctime przypisany zostanie aktualny czas.
Parametr
nsems może mieć wartość
0 (nie jest
brany pod uwagę), jeśli nie będzie tworzony zestaw
semaforów. W przeciwnym przypadku parametr
nsems musi być
większy od
0 i mniejszy lub równy maksymalnej liczbie
semaforów w zestawie (
SEMMSL).
Jeśli zestaw semaforów już istnieje, wówczas weryfikowane
są prawa dostępu.
WARTOŚĆ ZWRACANA¶
W wyniku pomyślnego wykonania wywołania, funkcja zwróci
identyfikator zestawu semaforów (nieujemną liczbę
całkowitą). W przeciwnym przypadku zwróci
-1, zaś
zmiennej
errno zostanie przypisany kod wskazujący rodzaj
błędu.
BŁĘDY¶
W przypadku niepowodzenia, zmiennej
errno zostanie przypisana jedna z
następujących wartości:
- EACCES
- Zestaw semaforów identyfikowany kluczem key
istnieje, ale proces wywołujący nie ma praw dostępu do
niego.
- EEXIST
- Zestaw semaforów o identyfikatorze key
istnieje, ale w parametrze semflg przekazane zostały
jednocześnie oba znaczniki IPC_CREAT i IPC_EXCL.
- ENOENT
- Nie ma zestawu semaforów o identyfikatorze key,
zaś znacznik IPC_CREAT nie został przekazany w parametrze
semflg.
- EINVAL
- nsems jest mniejsze niż 0 lub większe
niż ograniczenie liczby semaforów w zestawie (SEMMSL),
lub zestaw semaforów, do któregoodnosi się key
już istnieje a nsems jest większe niż liczba
semaforów w tym zestawie.
- ENOMEM
- Zestaw semaforów powinien zostać utworzony, ale
zabrakło pamięci na nową strukturę danych.
- ENOSPC
- Nastąpiła próba przekroczenia ograniczenia
liczby zestawów (SEMMNI), lub łącznej liczby
semaforów w systemie (SEMMNS).
UWAGI¶
Stała
IPC_PRIVATE nie jest znacznikiem, tylko specjalną
wartością typu
key_t. Jeśli zostanie ona przekazana jako
wartość parametru
key, wówczas (w razie pomyślnego
wykonania) funkcja systemowa pominie wszystko oprócz najmniej
znaczących 9 bitów
semflg, tworząc nowy zestaw
semaforów, nie posiadający identyfikatora.
Występują następujące ograniczenia zasobów systemowych,
związane z wywołaniem
semget:
- SEMMNI
- Maksymalna liczba zestawów semaforów w systemie:
zależna od polityki.
- SEMMSL
- Maksymalna liczba semaforów w zestawie: zależna
od implementacji (aktualnie 500).
- SEMMNS
- Maksymalna liczba semaforów w systemie: zależna
od polityki. Wartość większa niż SEMMSL *
SEMMNI pozbawia to ograniczenie sensu.
USTERKI¶
Wybrana nazwa, IPC_PRIVATE, prawdopodobnie nie jest najszczęśliwsza.
IPC_NEW w sposób bardziej przejrzysty odzwierciedlało by rolę
tej wartości.
Struktury danych skojarzone z poszczególnymi semaforami z zestawu nie
są inicjalizowane przez wywołanie systemowe. Aby
zainicjalizować te struktury, należy następnie użyć
dla tego zestawu semaforów wywołania
semctl(2) z rozkazami
SETVAL lub
SETALL.
ZGODNE Z¶
SVr4, SVID. SVr4 dokumentuje dodatkowe stałe błędów: EFBIG,
E2BIG, EAGAIN, ERANGE, EFAULT.
ZOBACZ TAKŻE¶
ftok(3),
ipc(5),
semctl(2),
semop(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 semget
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.