Rechercher une page de manuel
semget
Langue: pl
Version: 2002-01-04 (openSuse - 09/10/07)
Section: 2 (Appels système)
NAZWA
semget - pobranie identyfikatora zestawu semaforówSK£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)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre