Provided by: manpages-pl-dev_20060617-3_all bug

NAZWA

       shmctl - sterowanie segmentami pamici wspolnej

SK/LADNIA

       #include <sys/ipc.h>

       #include <sys/shm.h>

       int shmctl(int shmid, int cmd, struct shmid_ds *buf);

OPIS

       shmctl()  pozwala  uytkownikowi  pobiera  informacje  dotyczce segmentu
       pamici wspolnej, zmienia  wlaciciela,  grup  i  prawa  dostpu  do  tego
       segmentu  oraz  usun  segment.  Informacje dotyczce segmentu okrelonego
       przez shmid zwracane s w strukturze shmid_ds zdefiniowanej nastpujco:

           struct shmid_ds {
               struct ipc_perm shm_perm;  /* prawa dostpu */
               int shm_segsz;             /* rozmiar segmentu (w bajtach) */
               time_t shm_atime;          /* czas ostatniego dolczenia */
               time_t shm_dtime;          /* czas ostatniego odlczenia */
               time_t shm_ctime;          /* czas ostatniej modyfikacji */
               unsigned short shm_cpid;   /* PID tworcy segmentu */
               unsigned short shm_lpid;   /* PID ostatniego operatora segmentu */
               short shm_nattch;          /* liczba dolcze */
               ...
           };

       Mona nada warto wyronionym polom  struktury  shm_perm  opisujcej  prawa
       dostpu:

           struct ipc_perm
           {
               key_t  key;
               ushort uid;   /* euid oraz egid w/laciciela segmentu */
               ushort gid;
               ushort cuid;  /* euid oraz egid tworcy segmentu */
               ushort cgid;
               ushort mode;  /* 9 najmniej znaczcych bitow praw dostpu */
               ushort seq;   /* numer porzdkowy */
           };

       Nastpujce polecenia mog by przekazane za pomoc parametru cmd :

       IPC_STAT    sluy  do  kopiowania informacji o segmencie pamici wspolnej
                   do bufora buf. Uytkownik musi mie prawo do odczytu segmentu
                   pamici wspolnej.

       IPC_SET     sluy  do  modyfikacji  praw  dostpu  do  segmentu.  Z  pola
                   shm_perms struktury wskazanej przez parametr buf  pobierane
                   s  uid,  gid  i  mode.   System  uwzgldnia tylko 9 najmniej
                   znaczcych   bitow   parametru   mode.     Polu    shm_ctime
                   przypisywane   jest   aktualny   czas.  Uytkownik  musi  by
                   wlacicielem  segmentu,  jego  tworc   lub   administratorem
                   systemu.

       IPC_RMID    sluy  do  zaznaczenia  segmentu  do  usunicia.  Zostanie on
                   naprawd usunity w momencie, gdy wszystkie procesy odlcz si.
                   (Tj.  gdy  pole  shm_nattch  struktury  shmid_ds  opisujcej
                   segment osignie warto zero.) Uytkownik musi by  wlacicielem
                   segmentu, jego tworc lub administratorem systemu.

       Uytkownik musi zapewni, e segment po uyciu zostanie na pewno usunity. W
       przeciwnym przypadku, pami lub obszar wymiany zajmowane  przez  segment
       nie zostan zwolnione.

       Dodatkowo,  administrator  systemu  moe  zabroni  lub zezwoli na wymian
       obszarow pam ici zajmowanych przez segment (tylko  w  systemie  Linux).
       Slu do tego nastpujce wartoci cmd:

       SHM_LOCK    zabezpiecza  segment  pamici wspolnej przed wymian. Strony,
                   ktore wczeniej ulegly wymianie zostan  ponownie  zaladowane
                   do  pamici dopiero w momencie, gdy uytkownik wykona do nich
                   dostp.

       SHM_UNLOCK  zezwala  na  wymian  stron  nalecych  do  segmentu   pamici
                   wspolnej.

       Polecenia  sterujce  IPC_INFO,  SHM_STAT  oraz  SHM_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.

WARTO ZWRACANA

       Funkcja zwraca 0, jeli operacja zakoczy si pomylnie, a -1,  gdy  wystpi
       bld.

B/LDY

       W przypadku wystpienia bldu, zmiennej errno przypisana zostanie jedna z
       poniszych wartoi:

       EACCES      jeli wydano polecenie IPC_STAT, a prawa dostpu  okrelone  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 niedostpny.

       EINVAL      jeli shmid nie jest poprawnym identyfikatorem segmentu  lub
                   cmd nie jest poprawnym poleceniem.

       EIDRM       jeli shmid_ds wskazuje na segment, ktory zostal usunity.

       EPERM       jeli  uytkownik  probowal  wywola  polecenie  IPC_RMID  lub
                   IPC_SET, ale efektywny UID wlaciciela  procesu  wywolujcego
                   funkcj   nie   odpowiada   tworcy  segmentu  (okrelonemu  w
                   shm_perm.cuid),   wlacicielowi   segmentu   (okrelonemu   w
                   shm_perm.uid), ani administratorowi systemu.

       EOVERFLOW   jest  zwracane,  gdy wydano polecenie IPC_STAT, a warto gid
                   lub uid jest za dua, aby j umieci w strukturze  wskazywanej
                   przez buf.

UWAGA

       Niektore  pola struktury struct shmid_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.)

ZGODNE Z

       SVr4, SVID. SVr4 dokumentuje  dodatkowe  kody  bldow:  EINVAL,  ENOENT,
       ENOSPC,  ENOMEM,  EEXIST.  Ani  SVr4  ani SVID nie dokumentuj kodu bldu
       EIDRM.

ZOBACZ TAKE

       shmget(2), shmop(2)

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.