Rechercher une page de manuel
shmctl
Langue: pl
Version: 2002-01-05 (openSuse - 09/10/07)
Section: 2 (Appels système)
NAZWA
shmctl - sterowanie segmentami pamiêci wspólnejSK£ADNIA
#include <sys/ipc.h>#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
OPIS
shmctl() pozwala u¿ytkownikowi pobieraæ informacje dotycz±ce segmentu pamiêci wspólnej, zmieniaæ w³a¶ciciela, grupê i prawa dostêpu do tego segmentu oraz usun±æ segment. Informacje dotycz±ce segmentu okre¶lonego przez shmid zwracane s± w strukturze shmid_ds zdefiniowanej nastêpuj±co:struct shmid_ds { struct ipc_perm shm_perm; /* prawa dostêpu */ int shm_segsz; /* rozmiar segmentu (w bajtach) */ time_t shm_atime; /* czas ostatniego do³±czenia */ time_t shm_dtime; /* czas ostatniego od³±czenia */ time_t shm_ctime; /* czas ostatniej modyfikacji */ unsigned short shm_cpid; /* PID twórcy segmentu */ unsigned short shm_lpid; /* PID ostatniego operatora segmentu */ short shm_nattch; /* liczba do³±czeñ */ ... };
Mo¿na nadaæ warto¶æ wyró¿nionym polom struktury shm_perm opisuj±cej prawa dostêpu:
struct ipc_perm { key_t key; ushort uid; /* euid oraz egid w³a¶ciciela segmentu */ ushort gid; ushort cuid; /* euid oraz egid twórcy segmentu */ ushort cgid; ushort mode; /* 9 najmniej znacz±cych bitów praw dostêpu */ ushort seq; /* numer porz±dkowy */ };
Nastêpuj±ce polecenia mog± byæ przekazane za pomoc± parametru cmd :
- IPC_STAT
- s³u¿y do kopiowania informacji o segmencie pamiêci wspólnej do bufora buf. U¿ytkownik musi mieæ prawo do odczytu segmentu pamiêci wspólnej.
- IPC_SET
- s³u¿y do modyfikacji praw dostêpu do segmentu. Z pola shm_perms struktury wskazanej przez parametr buf pobierane s± uid, gid i mode. System uwzglêdnia tylko 9 najmniej znacz±cych bitów parametru mode. Polu shm_ctime przypisywane jest aktualny czas. U¿ytkownik musi byæ w³a¶cicielem segmentu, jego twórc± lub administratorem systemu.
- IPC_RMID
- s³u¿y do zaznaczenia segmentu do usuniêcia. Zostanie on naprawdê usuniêty w momencie, gdy wszystkie procesy od³±cz± siê. (Tj. gdy pole shm_nattch struktury shmid_ds opisuj±cej segment osi±gnie warto¶æ zero.) U¿ytkownik musi byæ w³a¶cicielem segmentu, jego twórc± lub administratorem systemu.
U¿ytkownik musi zapewniæ, ¿e segment po u¿yciu zostanie na pewno usuniêty. W przeciwnym przypadku, pamiêæ lub obszar wymiany zajmowane przez segment nie zostan± zwolnione.
Dodatkowo, administrator systemu mo¿e zabroniæ lub zezwoliæ na wymianê obszarów pam iêci zajmowanych przez segment (tylko w systemie Linux). S³u¿± do tego nastêpuj±ce warto¶ci cmd:
- SHM_LOCK
- zabezpiecza segment pamiêci wspólnej przed wymian±. Strony, które wcze¶niej uleg³y wymianie zostan± ponownie za³adowane do pamiêci dopiero w momencie, gdy u¿ytkownik wykona do nich dostêp.
- SHM_UNLOCK
- zezwala na wymianê stron nale¿±cych do segmentu pamiêci wspólnej.
Polecenia steruj±ce IPC_INFO, SHM_STAT oraz SHM_INFO s± u¿ywane przez program ipcs(8) do pobierania informacji o u¿ywanych zasobach w systemie. Je¶li zajdzie potrzeba, polecenia te mog± w przysz³o¶ci ulec zmianie lub ich obs³uga mo¿e zostaæ zawarta w systemie plików /proc.
WARTO¦Æ ZWRACANA
Funkcja zwraca 0, je¶li operacja zakoñczy siê pomy¶lnie, a -1, gdy wyst±pi b³±d.B£ÊDY
W przypadku wyst±pienia b³êdu, zmiennej errno przypisana zostanie jedna z poni¿szych warto¶æi:- EACCES
- je¶li wydano polecenie IPC_STAT, a prawa dostêpu okre¶lone w shm_perm.modes nie pozwalaj± na odczyt segmentu shmid.
- EFAULT
- Parametr cmd ma warto¶æ IPC_SET lub IPC_STAT, ale adres wskazany przez buf jest niedostêpny.
- EINVAL
- je¶li shmid nie jest poprawnym identyfikatorem segmentu lub cmd nie jest poprawnym poleceniem.
- EIDRM
- je¶li shmid_ds wskazuje na segment, który zosta³ usuniêty.
- EPERM
- je¶li u¿ytkownik próbowa³ wywo³aæ polecenie IPC_RMID lub IPC_SET, ale efektywny UID w³a¶ciciela procesu wywo³uj±cego funkcjê nie odpowiada twórcy segmentu (okre¶lonemu w shm_perm.cuid), w³a¶cicielowi segmentu (okre¶lonemu w shm_perm.uid), ani administratorowi systemu.
- EOVERFLOW
- jest zwracane, gdy wydano polecenie IPC_STAT, a warto¶æ gid lub uid jest za du¿a, aby j± umie¶ciæ w strukturze wskazywanej przez buf.
UWAGA
Niektóre pola struktury struct shmid_ds by³y w Linuksie 2.2 typu short a sta³y siê typu long w Linuksie 2.4. Aby to wykorzystaæ, powinna wystarczyæ rekompilacja pod glibc-2.1.91 lub nowsz±. (J±dro rozró¿nia stare i nowe wywo³ania za pomoc± znacznika IPC_64 w cmd.)ZGODNE Z
SVr4, SVID. SVr4 dokumentuje dodatkowe kody b³êdów: EINVAL, ENOENT, ENOSPC, ENOMEM, EEXIST. Ani SVr4 ani SVID nie dokumentuj± kodu b³êdu EIDRM.ZOBACZ TAK¯E
shmget(2), shmop(2)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre