Provided by: manpages-pl_20060617-4_all bug

NAZWA

       svipc - 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

       Niniejsza  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;    /* uprawnienia do odczytu/zapisu */

       Pole mode struktury ipc_perm w swoich najniższych dziewię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 komunikató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.

       Semafor 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

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

INFORMACJE O TŁUMACZENIU

       Powyższe  tłumaczenie  pochodzi  z nieistniejącego już Projektu Tłumaczenia Manuali i może
       nie być aktualne. W  razie  zauważenia  różnic  między  powyższym  opisem  a  rzeczywistym
       zachowaniem  opisywanego  programu  lub  funkcji,  prosimy  o  zapoznanie się z oryginalną
       (angielską) wersją strony podręcznika.