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/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ů (IPC) 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 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 */ };

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

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; /* semaphore value */
int sempid; /* PID of process that last modified */ };

Hodnota semaforu, nezáporné číslo.
PID of the last process that modified the value of this semaphore.

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

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.

IPC namespaces

For a discussion of the interaction of System V IPC objects and IPC namespaces, see namespaces(7).

DALŠÍ INFORMACE

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), namespaces(7)

TIRÁŽ

Tato stránka je součástí projektu Linux man-pages v4.16. Popis projektu a informace o hlášení chyb najdete na https://www.kernel.org/doc/man-pages/.

PŘEKLAD

Překlad této příručky do španělštiny vytvořili Pavel Heimlich <tropikhajma@gmail.com>

Tento překlad je bezplatná dokumentace; Přečtěte si GNU General Public License Version 3 nebo novější ohledně podmínek autorských práv. Neexistuje ŽÁDNÁ ODPOVĚDNOST.

Pokud narazíte na nějaké chyby v překladu této příručky, pošlete e-mail na adresu translation-team-cs@lists.sourceforge.net.

15. března 2016 Linux