IPC(5)

JMÉNO
ipc - System V meziprocesový komunikační mechanismus

SYNTAXE
# 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, sadz 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á ve hlavičkovém souboru <sys/ipc.h>, obsahuje následující členy:

    ushort cuid; /* uid toho, kdo objekt vytvořil */
    ushort cgid; /* gid toho, kdo objekt vytvořil */
    ushort uid; /* uid vlastníka */
    ushort gid; /* gid vlastníka */
    ushort 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 ipc_perm msg_perm;
    ushort msg_qnum; /* počet zpráv ve frontě */
    ushort msg_qbytes; /* maximální počet bytů ve zprávě */
    ushort msg_lspid; /* pid posledního volání msgsnd */
    ushort msg_lrpid; /* pid posledního volání msgrcv */
    time_t msg_stime; /* čas posledního volání msgsnd */
    time_t msg_rtime; /* čas posledního volání msgrcv */
    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 .

msg_lrpid
    ID procesu, který poslední vykonal systémové volání msgrcv .

msg_stime
    Čas posledního volání systémové služby msgsnd .

msg_rtime
    Čas posledního volání systémové služby msgcv

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 ipc_perm sem_perm;
    time_t sem_otime; /* čas poslední operace */
    time_t sem_ctime; /* čas poslední změny */
    ushort 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 .

sem_ctime
    Čas posledního volání systémové služby semctl , 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:

    ushort semval; /* hodnota semaforu */
    short sempid; /* pid poslední operace */
    ushort semncnt; /* počet čekajících na zvýšení hodnoty semval */
    ushort semzcnt; /* počet čekajících na vynulování semaforu */

semval
    Hodnota semaforu, nezáporné číslo.

sempid
    ID procesu, který naposledy měnil hodnotu tohoto semaforu.

semncnt
    Počet procesů čekajících na zvětšení hodnoty semval .

semznt
    Počet procesů čekajících na vynulování hodnoty semval .

  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 ipc_perm shm_perm;
    int shm_segsz; /* velikost segmentu */
    ushort shm_cpid; /* pid toho, jenž segment vytvořil */
    ushort shm_lpid; /* pid, poslední operace */
    short 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 nebo shmdt .

shm_nattch
    Počet připojených procesů.

shm_atime
    Čas posledního volání systémové služby shmat .

shm_dtime
    Čas posledního volání systémové služby shmdt .

shm_ctime
    Čas posledního volání systémové služby shmctl , která změnila hodnotu shmid_ds.

VIZ TÉŽ
ftok(3), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmget(2), shmdt (2).