Provided by: manpages-pl_0.7-1_all bug

NAZWA

       svipc - Mechanizmy komunikacji między procesami w Systemie V

SKŁADNIA

       #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 (IPC) 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 IPC. Struktura ipc_perm składa się z
       następujących pól:

           struct ipc_perm {
               uid_t          cuid;   /* ID użytkownika - twórcy */
               gid_t          cgid;   /* ID grupy twórcy */
               uid_t          uid;    /* ID użytkownika właściciela */
               gid_t          gid;    /* ID grupy właściciela */
               unsigned short mode;   /* prawa dostępu do odczytu i 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 msqid_ds, która jest zdefiniowana  w  pliku  <sys/msg.h>  i
       składa się z następujących pól:

           struct msqid_ds {
               struct ipc_perm msg_perm;
               msgqnum_t       msg_qnum;    /* liczba komunikatów w kolejce */
               msglen_t        msg_qbytes;  /* maksymalna liczba bajtów w kolejce  */
               pid_t           msg_lspid;   /* PID ostatniego wywołania msgsnd(2)  */
               pid_t           msg_lrpid;   /* PID ostatniego wywołania msgrcv(2)  */
               time_t          msg_stime;   /* czas ostatniego wywołania msgsnd(2) */
               time_t          msg_rtime;   /* czas ostatniego wywołania msgrcv(2) */
               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(2).

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

       msg_stime  Czas ostatniego wykonania funkcji systemowej msgsnd(2).

       msg_rtime  Czas ostatniego wykonania funkcji systemowej msgrcv(2).

       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 semid_ds {
               struct ipc_perm sem_perm;
               time_t          sem_otime;   /* czas ostatniej operacji */
               time_t          sem_ctime;   /* czas ostatniej zmiany */
               unsigned long   sem_nsems;   /* liczba semaforów w zbiorze */
           };

       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(2).

       sem_ctime  Czas ostatniego wywołania funkcji systemowej semctl(2), 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 nieujemną 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:

           struct sem {
               int semval;  /* wartość semaforu */
               int sempid;  /* PID ostatnio modyfikującego procesu */
           };

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

       sempid     PID ostatniego procesu, który wykonał zmodyfikował wartość tego semafora.

   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 shmid_ds {
               struct ipc_perm shm_perm;
               size_t          shm_segsz;   /* rozmiar segmentu */
               pid_t           shm_cpid;    /* PID twórcy */
               pid_t           shm_lpid;    /* PID ostatniej operacji */
               shmatt_t        shm_nattch;  /* liczba bieżących podłączeń */
               time_t          shm_atime;   /* czas ostatniego podłą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(2) lub shmdt(2).

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

       shm_atime  Czas ostatniego wykonania funkcji systemowej shmat(2).

       shm_dtime  Czas ostatniego wykonania funkcji systemowej shmdt(2).

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

   Przestrzenie nazw IPC
       Więcej informacji o obiektach i  przestrzeniach  nazw  IPC  w  Systemie  V  znajduje  się  w  podręczniku
       systemowym namespaces(7).

ZOBACZ TAKŻE

       ipcmk(1),  ipcrm(1),  ipcs(1),  lsipc(1),  ipc(2), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2),
       semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3), namespaces(7)

O STRONIE

       Angielska wersja tej strony pochodzi z wydania 4.05 projektu Linux man-pages. Opis  projektu,  informacje
       dotyczące   zgłaszania   błędów,   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod  adresem
       https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony  podręcznika  man  są:   Piotr   Pogorzelski   (PTM)
       <piotr.pogorzelski@ippt.gov.pl>,     Robert     Luberda     <robert@debian.org>     i    Michał    Kułach
       <michal.kulach@gmail.com>.

       Polskie tłumaczenie jest częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie  błędów  na  stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  4.05 oryginału.

Linux                                              2016-03-15                                           SVIPC(7)