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 */
}
semval |
Hodnota semaforu, nezáporné číslo. | ||
sempid |
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 */
};
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/.