Scroll to navigation

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:

Vytvoř, neexistuje-li.
Ukonči chybou, existuje-li.
Způsobí chybu, má-li se čekat.
Privátní klíč.
Vymaž resource.
Nastav parametry pro resource.
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 */ };

msg_perm typu ipc_perm specifikuje přístupová práva pro frontu událostí.
Počet zpráv ve frontě.
Maximální počet bytů ve zprávě pro tuto frontu.
ID procesu, který poslední vykonal systémové volání msgsnd(2).
ID procesu, který poslední vykonal systémové volání msgrcv(2).
Čas posledního volání systémové služby msgsnd(2).
Čas posledního volání systémové služby msgrcv(2).
Č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ě */ };

sem_perm typu ipc_perm specifikuje přístupová práva pro sadu semaforů.
Čas posledního volání systémové služby semop(2).
Č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.
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 */ }

Hodnota semaforu, nezáporné číslo.
ID procesu, který naposledy měnil hodnotu tohoto semaforu.

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 */ };

shm_perm typu ipc_perm specifikuje přístupová práva pro segment sdílené paměti.
Velikost segmentu v bytech.
ID procesu, který tento segment vytvořil.
ID procesu, který naposledy volal systémovou službu shmat(2) nebo shmdt(2).
Počet připojených procesů.
Čas posledního volání systémové služby shmat(2).
Čas posledního volání systémové služby shmdt(2).
Č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