Provided by: manpages-pl_20051117-1_all bug

NAZWA

       ipc - mechanizmy komunikacji między procesami w Systemie V

SKŁADNIA

       # include <sys/types.h>
       # include <sys/ipc.h>
       # include <sys/msg.h>
       # include <sys/sem.h>
       # include <sys/shm.h>

OPIS

       Nieniejsza dokumentacja stara się opisać implementację w systemie Linux
       mechanizmów   komunikacji   między   procesami   Systemu   V:   kolejek
       komunikatów,  semaforów  oraz  segmentów  pamięci  wspólnej.   Dalej  w
       tekście  słowo  zasób  oznacza  egzemplarz/realizację  jednego  z  tych
       mechanizmów.

   Prawa dostępu do zasobów
       W  przypadku  każdego  zasobu  system korzysta z ogólnej struktury typu
       struct  ipc_perm,  w  której  przechowuje   informacje   niezbędne   do
       określenia   uprawnień   do  wykonania  operacji.   Struktura  ipc_perm
       zdefiniowana w systemowym pliku nagłówkowym <sys/ipc.h>  składa  się  z
       następujących pól:

            ushort cuid;    /* id użytkownika tworzącego */
            ushort cgid;    /* id grupy tworzącego */
            ushort uid;     /* id właściciela */
            ushort gid;     /* id grupy właściciela */
            ushort mode;    /* uprawnieenia do odczytu/zapisu */

       Pole   mode  struktury  ipc_perm  w  swoich  najniższych  9-ciu  bitach
       przechowuje  informacje  o  prawach  dostępu  do  zasobu  dla   procesu
       wywołującego    funkcję    systemową   metod   ipc.    Uprawnienia   są
       interpretowane w sposób następujący:

            0400 Prawo do odczytu przez użytkownika.
            0200 Prawo do zapisu przez użytkownika.
            0040 Prawo do odczytu przez grupę.
            0020 Prawo do zapisu przez grupę.
            0004 Prawo do odczytu przez innych.
            0002 Prawo do zapisu przez innych.

       Bity 0100, 0010 i 0001 (bity praw do uruchamiania) nie są przez  system
       wykorzystywane.  Co  więcej,  w  przypadku  zestawu  semaforów "zapisz"
       efektywnie oznacza "zmień".

       W tym samym systemowym pliku nagłówkowym zawarta jest definicja stałych
       symbolicznych:

       IPC_CREAT     Utworzenie pozycji, gdy klucz nie istnieje.

       IPC_EXCL      Błąd, gdy klucz istnieje.

       IPC_NOWAIT    Błąd, gdy żądanie musi czekać.

       IPC_PRIVATE   Klucz prywatny.

       IPC_RMID      Usunięcie zasobu.

       IPC_SET       Ustawienie opcji zasobu.

       IPC_STAT      Odczytanie opcji zasobu.

       Proszę  zauważyć,  że IPC_PRIVATE jest typu key_t podczas gdy pozostałe
       stałe są polami znacznikowymi które mogą być sumowane  bitowo  (OR)  do
       jednej zmiennej typu int.

   Kolejki komunikaktów
       Kolejka  komunikatów  jest  w  sposób jednoznaczny identyfikowana przez
       dodatnią liczbę całkowitą (jej msqid) oraz posiada skojarzoną strukturę
       typu  struct  msquid_ds, która jest zdefiniowana w pliku <sys/msg.h>, a
       składa się z następujących pól:

            struct ipc_perm msg_perm;
            ushort msg_qnum;     /* liczba komunikatów w kolejce */
            ushort msg_qbytes;   /* maks. liczba bajtów w kolejce */
            ushort msg_lspid;    /* PID ostatnio wywołującego msgsnd */
            ushort msg_lrpid;    /* PID ostatnio wywołującego msgrcv */
            time_t msg_stime;    /* czas ostatniego msgsnd */
            time_t msg_rtime;    /* czas ostatniego msgrcv */
            time_t msg_ctime;    /* czas ostatniej zmiany */

       msg_perm   Struktura ipc_perm, która określa prawa dostępu  do  kolejki
                  komunikatów.

       msg_qnum   Liczba komunikatów znajdujących się aktualnie w kolejce.

       msg_qbytes Maksymalna  liczba  bajtów tekstu komunikatu na jaką pozwala
                  kolejka.

       msg_lspid  Identyfikator  procesu,  który   ostatni   wykonał   funkcję
                  systemową msgsnd.

       msg_lrpid  identyfikator   procesu,   który   ostatni  wykonał  funkcję
                  systemową msgrcv.

       msg_stime  Czas ostatniego wykonania funkcji systemowej msgsnd.

       msg_rtime  Czas ostatniego wykonania funkcji systemowej msgcv.

       msg_ctime  Czas  ostatniego  wywołania  funkcji  systemowej,  w  wyniku
                  którego zmienione zostało pole struktury msqid_ds.

   Zestawy semaforów.
       Semafor   jest   jednoznacznie  identyfikowany  przez  dodatnią  liczbę
       całkowitą (jego semid) i  jest  skojarzony  ze  strukturą  typu  struct
       semid_ds,   zdefiniowaną  w  pliku  <sys/sem.h>,  która  składa  się  z
       następujących pól:

            struct ipc_perm sem_perm;
            time_t sem_otime;    /* czas ostatniej operacji */
            time_t sem_ctime;    /* czas ostatniej zmiany */
            ushort sem_nsems;    /* liczba semaforów w zestawie */

       sem_perm   Struktura ipc_perm, która określa prawa dostępu  do  zestawu
                  semaforów.

       sem_otime  Czas ostatniego wywołania funkcji systemowej semop.

       sem_ctime  Czas  ostatniego  wywołania funkcji systemowej semctl, która
                  zmieniła element przedstawionej powyżej struktury lub  jeden
                  z semaforów należących do zestawu.

       sem_nsems  Liczba  semaforów  w  zestawie.  Każdy  semafor zestawu jest
                  identyfikowany przez dodatnią liczbę całkowitą z zakresu  od
                  0 do sem_nsems-1.

       Semofor   jest   strukturą   typu   struct  sem,  która  składa  się  z
       następujących pól:

            ushort semval;  /* wartość semafora */
            short sempid;   /* PID procesu ostatniej operacji */
            ushort semncnt; /* liczba oczekujących na zwiększenie semval */
            ushort semzcnt; /* liczba oczekujących na semval = 0 */

       semval     Wartość semafora: nieujemna liczba całkowita.

       sempid     Identyfikator ostatniego procesu, który wykonał operację  na
                  tym semaforze.

       semncnt    Liczba  wstrzymanych  procesów  oczekujących  na zwiększenie
                  wartości zmiennej semval.

       semznt     Liczba wstrzymanych procesów oczekujących aż zmienna  semval
                  przyjmie wartość zero.

   Segmenty pamięci wspólnej
       Segment   pamięci  wspólnej  jest  jednoznacznie  identyfikowany  przez
       dodatnią liczbę całkowitą (jego shmid) i jest skojarzony  ze  strukturą
       typu  struct  shmid_ds,  zdefiniowaną w <sys/shm.h>, która składa się z
       następujących pól:

            struct ipc_perm shm_perm;
            int shm_segsz;       /* rozmiar segmentu */
            ushort shm_cpid;     /* PID procesu, który utworzył segment */
            ushort shm_lpid;     /* PID ostatnio operującego na segmencie */
            short shm_nattch;    /* liczba aktualnych przyłączeń */
            time_t shm_atime;    /* czas ostatniego przyłączenia*/
            time_t shm_dtime;    /* czas ostatniego odłączenia*/
            time_t shm_ctime;    /* czas ostatniej zmiany */

       shm_perm   Struktura ipc_perm, która określa prawa dostępu do  segmentu
                  pamięci wspólnej.

       shm_segsz  Rozmiar segmentu pamięci wspólnej w bajtach.

       shm_cpid   Identyfikator  procesu,  który  utworzył ten segment pamięci
                  wspólnej.

       shm_lpid   Identyfikator  procesu,  który   ostatni   wykonał   funkcję
                  systemową shmat lub shmdt.

       shm_nattch Liczba  aktualnych,  aktywnych  przyłączeń  do tego segmentu
                  pamięci wspólnej.

       shm_atime  Czas ostatniego wykonania funkcji systemowej shmat.

       shm_dtime  Czas ostatniego wykonania funkcji systemowej shmdt.

       shm_ctime  Czas  ostatniego  wykonania  funkcji  systemowej  shmctl,  w
                  wyniku którego zmienione zostało shmid_ds.

ZOBACZ TAKŻE

       ftok(3),   msgctl(2),   msgget(2),   msgrcv(2),  msgsnd(2),  semctl(2),
       semget(2), semop(2), shmat(2), shmctl(2), shmget(2), shmdt(2)