semget

Autres langues

Langue: pl

Autres versions - même langue

Version: 2002-01-04 (openSuse - 09/10/07)

Section: 2 (Appels système)

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)