table of contents
- buster-backports 1:4.10.0-1~bpo10+1
- testing 1:4.10.0-1
- unstable 1:4.10.0-1
SVIPC(7) | Podręcznik programisty Linuksa | SVIPC(7) |
NAZWA¶
sysvipc - mechanizmy komunikacji między procesami w Systemie VSKŁ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 odczyt przez użytkownika. 0200 zapis przez użytkownika. 0040 odczyt przez grupę. 0020 zapis przez grupę. 0004 odczyt przez pozostałych. 0002 zapis przez pozostałych.
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 ipc_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), ipc_namespaces(7)O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 5.04 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 są: Piotr Pogorzelski <piotr.pogorzelski@ippt.gov.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres manpages-pl-list@lists.sourceforge.net.
10 października 2019 r. | Linux |