Provided by:
manpages-pl-dev_20060617-1_all 
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
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)