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 (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 zdefiniowana w systemowym pliku
  nagłówkowym 
<sys/ipc.h> 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 ostatniej operacji */
};
  - semval
 
  - Wartość semafora: nieujemna liczba
      całkowita.
 
  - sempid
 
  - Identyfikator ostatniego procesu, który wykonał
      operację na tym semaforze.
 
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.
 
ZOBACZ TAKŻE¶
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)
O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 3.40 projektu Linux
  
man-pages. Opis projektu oraz informacje dotyczące zgłaszania
  błędów można znaleźć pod adresem
  
http://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> i
  Robert Luberda <robert@debian.org>.
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ą 
  3.40 oryginału.