table of contents
SVIPC(7) | Linux - příručka programátora | SVIPC(7) |
JMÉNO¶
svipc - System V meziprocesový komunikační mechanismus
POUŽITͶ
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/sem.h> #include <sys/shm.h>
POPIS¶
Tato manuálová stránka popisuje implementaci System V meziprocesových komunikačních mechanismů v Linuxu: fronty zpráv, sady semaforů a sdílenou paměť. V následujícím textu slovo resource znamená instanci jednoho z těchto mechanismů.
Přístupová práva pro Resource¶
Pro každé resource používá
systém společnou strukturu typu struct ipc_perm
pro ukládání informací potřebných
k určení práva na provedení ipc operace.
Struktura ipc_perm definovaná v systémovém
hlavičkovém souboru <sys/ipc.h>, obsahuje
následující členy:
struct ipc_perm {
uid_t cuid; /* uid toho, kdo objekt vytvořil */
gid_t cgid; /* gid toho, kdo objekt vytvořil */
uid_t uid; /* uid vlastníka */
gid_t gid; /* gid vlastníka */
unsigned short mode; /* práva pro čtení/zápis */ };
Člen mode ze struktury ipc_perm definuje ve svých spodních 9 bitech přístupová práva pro resource pro proces vykonávající systémové voláni ipc takto:
0400 Uživatel smí číst.
0200 Uživatel smí zapisovat.
0040 Skupina smí číst.
0020 Skupina smí zapisovat.
0004 Kdokoli smí číst.
0002 Kdokoli smí zapisovat.
Bity 0100, 0010 a 0001 (právo na spuštění) nejsou použity. Navíc, "zápis" ve skutečnosti znamená "změnu" pro sadu semaforů.
Tentýž hlavičkový soubor definuje také následující symbolické konstanty:
- IPC_CREAT
- Vytvoř, neexistuje-li.
- IPC_EXCL
- Ukonči chybou, existuje-li.
- IPC_NOWAIT
- Způsobí chybu, má-li se čekat.
- IPC_PRIVATE
- Privátní klíč.
- IPC_RMID
- Vymaž resource.
- IPC_SET
- Nastav parametry pro resource.
- IPC_STAT
- Zjisti nastavení resource.
Poznamenejme, že IPC_PRIVATE je typu key_t, zatímco všechny ostatní symbolické konstanty jsou vlajky, které lze logickým součtem kombinovat do proměnné typu int.
Fronty zpráv¶
Fronta událostí je jednoznačně
identifikována kladným celým číslem
(jejím msqid) a má asociovanou datovou strukturu typu
struct msquid_ds, definovanou v <sys/msg.h>,
obsahující následující členy:
struct msqid_ds {
struct ipc_perm msg_perm;
msgqnum_t msg_qnum; /*počet zpráv ve frontě */
msglen_t msg_qbytes; /*max počet bytů ve frontě */
pid_t msg_lspid; /*PID posledního volání msgsnd(2) */
pid_t msg_lrpid; /*PID posledního volání msgrcv(2) */
time_t msg_stime; /*čas posledního volání msgsnd(2) */
time_t msg_rtime; /*čas posledního volání msgrcv(2) */
time_t msg_ctime; /*čas poslední změny */ };
- Struktura
- msg_perm typu ipc_perm specifikuje přístupová práva pro frontu událostí.
- msg_qnum
- Počet zpráv ve frontě.
- msg_qbytes
- Maximální počet bytů ve zprávě pro tuto frontu.
- msg_lspid
- ID procesu, který poslední vykonal systémové volání msgsnd(2).
- msg_lrpid
- ID procesu, který poslední vykonal systémové volání msgrcv(2).
- msg_stime
- Čas posledního volání systémové služby msgsnd(2).
- msg_rtime
- Čas posledního volání systémové služby msgrcv(2).
- msg_ctime
- Čas poslední volání systémové služby, která změnila členy struktury msqid_ds.
Sady semaforů¶
Sada semaforů je jednoznačně
identifikována kladným celým číslem
(jejím semid) a má asociovanou datovou strukturu typu
struct semid_ds, definovanou v <sys/sem.h>,
obsahující následující členy:
struct semid_ds {
struct ipc_perm sem_perm;
time_t sem_otime; /* čas poslední operace */
time_t sem_ctime; /* čas poslední změny */
unsigned long sem_nsems; /* počet semaforů v sadě */ };
- Struktura
- sem_perm typu ipc_perm specifikuje přístupová práva pro sadu semaforů.
- sem_otime
- Čas posledního volání systémové služby semop(2).
- sem_ctime
- Čas posledního volání systémové služby semctl(2), která změnila předchozí strukturu nebo hodnotu některého ze semaforů ze sady.
- sem_nsems
- Počet semaforů v sadě. Každý semafor je identifikován nezáporným číslem od 0 do sem_nsems-1.
Semafor je datová struktura typu struct sem
obsahující tyto členy:
struct sem {
int semval; /* hodnota semaforu */
int sempid; /* PID poslední operace */ }
Segmenty sdílené paměti¶
Segment sdílené paměti je
jednoznačně identifikován kladným celým
číslem (jeho shmid) a má asociovanou datovou
strukturu typu struct shmid_ds, definovanou v
<sys/shm.h>, obsahující
následující členy:
struct shmid_ds {
struct ipc_perm shm_perm;
size_t shm_segsz; /* velikost segmentu */
pid_t shm_cpid; /* PID tvůrce segmentu */
pid_t shm_lpid; /* PID, poslední operace */
shmatt_t shm_nattch; /* počet připojených */
time_t shm_atime; /* čas posledního připojení */
time_t shm_dtime; /* čas posledního odpojení */
time_t shm_ctime; /* čas poslední změny */ };
- Struktura
- shm_perm typu ipc_perm specifikuje přístupová práva pro segment sdílené paměti.
- shm_segsz
- Velikost segmentu v bytech.
- shm_cpid
- ID procesu, který tento segment vytvořil.
- shm_lpid
- ID procesu, který naposledy volal systémovou službu shmat(2) nebo shmdt(2).
- shm_nattch
- Počet připojených procesů.
- shm_atime
- Čas posledního volání systémové služby shmat(2).
- shm_dtime
- Čas posledního volání systémové služby shmdt(2).
- shm_ctime
- Čas posledního volání systémové služby shmctl(2), která změnila hodnotu shmid_ds.
DALŠÍ INFORMACE¶
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)
TIRÁŽ¶
Tato stránka je součástí projektu Linux man-pages. Popis projektu a informace o hlášení chyb najdete na http://www.kernel.org/doc/man-pages/.
2009-09-03 | Linux |