Arch manual pages

SVIPC(7) Linux - příručka programátora SVIPC(7)

svipc - System V meziprocesový komunikační mechanismus

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>

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ů.

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.

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.

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.

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.

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)

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/.
1993-11-01 Linux