Provided by:
manpages-pl-dev_20060617-3_all 
NAZWA
semctl - sterowanie semaforami
SK/LADNIA
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semctl(int semid, int semnum, int cmd, ...);
OPIS
Funkcja semctl wykonuje operacj sterujc okrelon przez cmd na zestawie
semaforow okrelonym przez semid lub na semnum-tym semaforze tego
zestawu. (Numeracja semaforow zaczyna si od 0.)
Funkcja ta posiada trzy lub cztery argumenty. Gdy jest ich cztery,
wywolanie ma posta semctl(semid,semnum,cmd,arg), gdzie czwarty argument
arg jest typu union semun zdefiniowanego nastpujco:
#if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
/* union semun jest zdefiniowana w <sys/sem.h> */
#else
/* dla zgodnoci z X/OPEN musimy sami sobie zdefiniowa */
union semun {
int val; /* warto dla SETVAL */
struct semid_ds *buf; /* bufor dla IPC_STAT i IPC_SET */
unsigned short *array; /* tablica dla GETALL i SETALL */
/* Cz specyficzna dla Linuksa: */
struct seminfo *__buf; /* bufor dla IPC_INFO */
};
#endif
Dozwolone wartoci parametru cmd to:
IPC_STAT Kopiowanie informacji ze struktury kontrolnej zestawu
semaforow do struktury wskazywanej przez arg.buf. Argument
semnum jest pomijany. Proces wywolujcy funkcj musi mie
prawa do odczytu zestawu semaforow.
IPC_SET Zapis wartoci niektorych pol struktury semid_ds wskazywanej
przez arg.buf do struktury kontrolnej zestawu semaforow z
jednoczesnym uaktualnieniem pola sem_ctime (tj.
przypisaniem mu aktualnego wskazania czasu). Pola zadanej
struktury struct semid_ds wskazywanej przez arg.buf,
ktorych wartoci s kopiowane to:
sem_perm.uid
sem_perm.gid
sem_perm.mode /* tylko 9 najmniej znaczcych bitow */
Efektywny identyfikator uytkownika procesu wywolujcego musi
wskazywa na administratora systemu, tworc zestawu semaforow
lub jego wlaciciela. Argument semnum jest pomijany.
IPC_RMID Natychmiastowe usunicie zestawu semaforow i zwizanych z nim
struktur danych. Wszystkie procesy oczekujce zostan
wznowione i wywolania, ktore wykonywaly zasygnalizuj bld
(przypisujc zmiennej errno warto EIDRM). Efektywny
identyfikator uytkownika procesu wywolajcego funkcj musi
wskazywa na administratora systemu, tworce zestawu
semaforow lub jego wlaciciela. Argument semnum jest
pomijany.
GETALL Zwraca wartoci semval wszystkich semaforow z zestawu
umieszczajc je w tablicy arg.array. Argument semnum jest
pomijany. Proces wywolujcy funkcj musi mie prawa do
odczytu zestawu semaforow.
GETNCNT Zwraca warto semncnt skojarzon z semaforem numer semnum
semaforem (tzn. liczb procesow oczekujcych na zwikszenie si
wartoci semval skojarzonej z semaforem numer semnum).
Proces wywolujcy funkcj musi mie prawa do odczytu zestawu
semaforow.
GETPID Zwraca warto sempid skojarzon z semaforem o numerze semnum
w zestawie. (jest to identyfikator procesu, ktory ostatnio
wykonal semop na semaforze). Proces wywolujcy funkcj musi
mie prawa do odczytu zestawu semaforow.
GETVAL Zwraca warto semval semafora o numerze semnum w zestawie.
Proces wywolujcy funkcj musi mie prawa do odczytu zestawu
semaforow.
GETZCNT Zwraca warto semzcnt skojarzon z semaforem o numerze semnum
w zestawie. (tzn. liczb procesow oczekujcych na osignicie
przez semafor o numerze semnum wartoci 0). Proces
wywolujcy funkcj musi mie prawa do odczytu zestawu
semaforow.
SETALL Przypisuje wartoci semval wszystkim semaforom zestawu,
korzystajc z tablicy arg.array, jednoczenie uaktualnia pole
sem_ctime struktury semid_ds skojarzonej z zestawem.
Wszystkie struktury sem_undo skojarzone z zestawem s we
wszystkich procesach zwalniane. Procesy oczekujce na
osignicie przez poszczegolne semafory okrelonych wartoci s
wznawiane, jeli ktora z wartoci semval stanie si zerowa lub
wzronie. Argument semnum jest pomijany. Proces wywolujcy
funkcj musi mie prawa do modyfikacji zestawu semaforow.
SETVAL Przypisuje warto arg.val polu semval semafora o numerze
semnum w zestawie. Pole sem_ctime struktury semid_ds
skojarzonej z semaforem jest uaktualniane. Wszystkie
struktury sem_undo skojarzone z semaforem s zwalniane.
Procesy oczekujce na osignicie przez semafor okrelonych
wartoci zostan wznowione, jeli semval stanie si rowne zeru
lub wzronie. Proces wywolujcy funkcj musi mie prawa do
odczytu zestawu semaforow.
WARTO ZWRACANA
W przypadku wystpienia bldu, semctl zwroci -1, przypisujc zmiennej
errno warto okrelajc rodzaj bldu. W przeciwnym przypadku zwrocona
zostanie nieujemna warto zalena od okrelonej przez cmd wykonywanej
operacji w nastpujcy sposob:
GETNCNT warto semncnt.
GETPID warto sempid.
GETVAL warto semval.
GETZCNT warto semzcnt.
Dla wszystkich pozostalych wartoci cmd w razie pomylnego zakoczenia
zwracane jest 0.
B/LDY
W przypadku wystpienia bldu, zmienna errno przyjmie jedn z nastpujcych
wartoi:
EACCES Proces wywolujcy funkcj nie ma odpowiednich praw wymaganych
do wykonania operacji cmd.
EFAULT Adres wskazywany przez arg.buf lub arg.array jest
niedostpny.
EIDRM Zestaw semaforow zostal usunity.
EINVAL Niewlaciwa warto parametru cmd lub semid.
EPERM Argument cmd ma warto IPC_SET lub IPC_RMID, ale proces
wywolujcy funkcj nie ma uprawnie upowaniajcych do wykonania
tego polecenia.
ERANGE Argument cmd ma warto SETALL lub SETVAL ale przekazywana
warto semafora semval (dla ktorego z semaforow zestawu) jest
mniejsza od 0 lub wiksza od wartoci ograniczenia systemowego
SEMVMX.
UWAGI
Polecenia sterujce IPC_INFO, SEM_STAT i SEM_INFO s uywane przez program
ipcs(8) do pobierania informacji o uywanych zasobach w systemie. Jeli
zajdzie potrzeba, polecenia te mog w przyszloci ulec zmianie lub ich
obsluga moe zosta zawarta w systemie plikow /proc.
Niektore pola struktury struct semid_ds byly w Linuksie 2.2 typu short
a staly si typu long w Linuksie 2.4. Aby to wykorzysta, powinna
wystarczy rekompilacja pod glibc-2.1.91 lub nowsz. (Jdro rozronia
stare i nowe wywolania za pomoc znacznika IPC_64 w cmd.)
Dla wywolania semctl obowizuj nastpujce ograniczenia systemowe:
SEMVMX Maksymalna warto semval: zalena od implementacji (32767).
W celu uzyskania lepszej przenonoci, najlepiet zawsze wywolywa semctl z
czterema argumentami.
Pod Linuksem funkcja semctl nie jest funkcj systemow, ale jest
zaimplementowana poprzez funkcj systemow ipc(2).
ZGODNE Z
SVr4, SVID. W SVr4 udokumntowano jeszcze EINVAL i EOVERFLOW.
ZOBACZ TAKE
ipc(2), shmget(2), shmat(2), shmdt(2), ipc(5)
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.