svipc

Autres langues

Langue: ja

Version: 1993-11-01 (openSuse - 09/10/07)

Section: 7 (Divers)

̾Á°

svipc - System V ¥×¥í¥»¥¹´ÖÄÌ¿®µ¡¹½

½ñ¼°


# include <sys/types.h>

# include <sys/ipc.h>

# include <sys/msg.h>

# include <sys/sem.h>

# include <sys/shm.h>

 

ÀâÌÀ

¤³¤Î¥Þ¥Ë¥å¥¢¥ë¡¦¥Ú¡¼¥¸¤Ï System V ¥×¥í¥»¥¹´ÖÄÌ¿®µ¡¹½¤Î Linux ¤Ë ¤ª¤±¤ë¼ÂÁõ¤òÀâÌÀ¤¹¤ë¡£ ¤³¤Î¥×¥í¥»¥¹´ÖÄÌ¿®µ¡¹½(interprocess communication mechanism)¤Ë¤Ï¡¢ ¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼(message queue)¡¢¥»¥Þ¥Õ¥©¡¼½¸¹ç(semaphore set)¡¢ ¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È(shared memory segment)¤Ê¤É¤¬¤¢¤ë¡£°Ê²¼¤Ç »ñ¸»(resource) ¤È¤¤¤¦ÍѸì¤ò»ÈÍѤ·¤¿¾ì¹ç¤Ë¤Ï¤³¤ì¤é¤Îµ¡¹½¤Î¤É¤ì¤«¤ò°ÕÌ£¤¹¤ë¡£

»ñ¸»¤Ø¤Î¥¢¥¯¥»¥¹µö²Ä

¥·¥¹¥Æ¥à¤Î¤½¤ì¤¾¤ì¤Î»ñ¸»¤Ï¡¢ipc ¤Ø¤ÎÁàºî¤òµö²Ä¤¹¤ë¤«¤É¤¦¤«¤ò·èÄꤹ¤ë ¤¿¤á¤Î¾ðÊó¤ò¶¦Ä̤ι½Â¤ÂÎ struct ipc_perm ¤Ë³ÊǼ¤·¤Æ»ÈÍѤ¹¤ë¡£ ipc_perm ¹½Â¤ÂΤϡ¢¥Ø¥Ã¥À¡¼¥Õ¥¡¥¤¥ë¤Î <sys/ipc.h> ¤ËÄêµÁ¤µ¤ì¤Æ¤ª¤ê¡¢°Ê²¼¤Î¥á¥ó¥Ð¡¼¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë:

       uid_t cuid;      /* ºîÀ®¼Ô¤Î¥æ¡¼¥¶¡¼ID */

       gid_t cgid;      /* ºîÀ®¼Ô¤Î¥°¥ë¡¼¥×ID */

       uid_t uid;       /* ½êÍ­¼Ô¤Î¥æ¡¼¥¶¡¼ID */

       gid_t gid;       /* ½êÍ­¼Ô¤Î¥°¥ë¡¼¥×ID */

       ushort mode;     /* Æɤ߽ñ¤­¤Îµö²Ä */

ipc_perm ¹½Â¤ÂΤΠmode ¥á¥ó¥Ð¡¼¤Ï°Ê²¼¤Î 9 ¥Ó¥Ã¥È¤Ç¡¢¥×¥í¥»¥¹¤Î ipc ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë ¤Ë¤è¤ë»ñ¸»¤Ø¤Î¥¢¥¯¥»¥¹µö²Ä¤òÄêµÁ¤¹¤ë¡£ µö²Ä¤Ï°Ê²¼¤Î¤è¤¦¤Ë²ò¼á¤µ¤ì¤ë:


        0400    ¥æ¡¼¥¶¡¼¤Ë¤è¤ëÆɤ߹þ¤ß¡£

        0200    ¥æ¡¼¥¶¡¼¤Ë¤è¤ë½ñ¤­¹þ¤ß¡£



        0040    ¥°¥ë¡¼¥×¤Ë¤è¤ëÆɤ߹þ¤ß¡£

        0020    ¥°¥ë¡¼¥×¤Ë¤è¤ë½ñ¤­¹þ¤ß¡£



        0004    ¾¿Í¤Ë¤è¤ëÆɤ߹þ¤ß¡£

        0002    ¾¿Í¤Ë¤è¤ë½ñ¤­¹þ¤ß¡£

¥·¥¹¥Æ¥à¤Ï¥Ó¥Ã¥È 0100, 0010, 0001 (¼Â¹Ô¥Ó¥Ã¥È) ¤Ï»ÈÍѤ·¤Ê¤¤¡£ ¤µ¤é¤Ë¡¢¥»¥Þ¥Õ¥©¡¼¤Î¾ì¹ç¤Ë¤Ï "½ñ¤­¹þ¤ß(write)" ¤Ï¼ÂºÝ¤Ë¤Ï "Êѹ¹(alter)" ¤ò°ÕÌ£¤¹¤ë¡£

Ʊ¤¸¥Ø¥Ã¥À¡¼¥Õ¥¡¥¤¥ë¤Ë¤Ï°Ê²¼¤Î¥·¥ó¥Ü¥ë¤ÎÄêµÁ¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë:

IPC_CREAT
¥­¡¼(key)¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ë¤Ï¿·¤¿¤Ê¥¨¥ó¥È¥ê¤òºîÀ®¤¹¤ë¡£
IPC_EXCL
¥­¡¼(key)¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ë¤Ï¼ºÇÔ¤¹¤ë¡£
IPC_NOWAIT
Í׵᤬ÂÔ¤¿¤µ¤ì¤ë¾ì¹ç¤Ë¤Ï¥¨¥é¡¼¤Ë¤Ê¤ë¡£
IPC_PRIVATE
¥×¥é¥¤¥Ù¡¼¥È¡¦¥­¡¼¡£
IPC_RMID
»ñ¸»¤òºï½ü¤¹¤ë¡£
IPC_SET
»ñ¸»¤Ë¥ª¥×¥·¥ç¥ó¤òÀßÄꤹ¤ë¡£
IPC_STAT
»ñ¸»¤Î¥ª¥×¥·¥ç¥ó¤ò¼èÆÀ¤¹¤ë¡£

IPC_PRIVATE ¤Ï key_t ·¿¤Ç¤¢¤ë¡£¤½¤Î¾¤ÎÁ´¤Æ¤Î¥·¥ó¥Ü¥ë¤Ï¥Õ¥é¥°¡¦¥Õ¥£¡¼¥ë¥É¤È¤·¤Æ int ÊÑ¿ô¤Ë OR ±é»»¤Ç³ÊǼ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼

¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤ÏÀµ¤ÎÀ°¿ô (msqid) ¤Ë¤è¤Ã¤Æ¼±Ê̤µ¤ì¡¢ <sys/msg.h> ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¹½Â¤ÂÎ struct msqid_ds ¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤¤¤ë¡£ ¤³¤Î¹½Â¤ÂΤϰʲ¼¤Î¥á¥ó¥Ð¡¼¤ò´Þ¤ó¤Ç¤¤¤ë:

       struct ipc_perm msg_perm;
       msgqnum_t msg_qnum;      /* ¥­¥å¡¼¤Ë¤¢¤ë¥á¥Ã¥»¡¼¥¸¤Î¿ô */

       msglen_t msg_qbytes;     /* ¥­¥å¡¼¤ÎºÇÂç¥Ð¥¤¥È¿ô */

       pid_t msg_lspid;         /* ºÇ¸å¤Ë msgsnd(2) ¤ò¤·¤¿ PID */

       pid_t msg_lrpid;         /* ºÇ¸å¤Ë msgrcv(2) ¤ò¤·¤¿ PID */

       time_t msg_stime;        /* ºÇ¸å¤Ë msgsnd(2) ¤ò¤·¤¿»þ´Ö */

       time_t msg_rtime;        /* ºÇ¸å¤Ë msgrcv(2) ¤ò¤·¤¿»þ´Ö */

       time_t msg_ctime;        /* ºÇ¸å¤ËÊѹ¹¤µ¤ì¤¿»þ´Ö */

msg_perm
¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Ø¤Î¥¢¥¯¥»¥¹µö²Ä¤ò»ØÄꤹ¤ë ipc_perm ¹½Â¤ÂΡ£
msg_qnum
¸½ºß¡¢¤³¤Î¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤Ë¤¢¤ë¥á¥Ã¥»¡¼¥¸¤Î¿ô¡£
msg_qbytes
¥á¥Ã¥»¡¼¥¸¡¦¥­¥å¡¼¤ËÆþ¤ì¤ë¤³¤È¤¬¤Ç¤­¤ë¥á¥Ã¥»¡¼¥¸¤ÎºÇÂç¥Ð¥¤¥È¿ô¡£
msg_lspid
ºÇ¸å¤Ë msgsnd(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿¥×¥í¥»¥¹¤Î ID¡£
msg_lrpid
ºÇ¸å¤Ë msgrcv(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿¥×¥í¥»¥¹¤Î ID¡£
msg_stime
ºÇ¸å¤Ë msgsnd(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿»þ´Ö¡£ msg_rtime ºÇ¸å¤Ë msgcv(2) ¤ò¹Ô¤Ê¤Ã¤¿»þ´Ö¡£
msg_ctime
ºÇ¸å¤Ë msqid_ds ¹½Â¤ÂΤΥá¥ó¥Ð¡¼¤¬Êѹ¹¤µ¤ì¤¿»þ´Ö¡£

¥»¥Þ¥Õ¥©¡¼½¸¹ç

¥»¥Þ¥Õ¥©¡¼½¸¹ç¤ÏÀµ¤ÎÀ°¿ô (semid) ¤Ë¤è¤Ã¤Æ¼±Ê̤µ¤ì¡¢ <sys/sem.h> ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¹½Â¤ÂÎ struct semid_ds ¤Ë·ë¤Ó¤Ä¤±¤é¤ì¤Æ¤¤¤ë¡£ ¤³¤Î¹½Â¤ÂΤϰʲ¼¤Î¥á¥ó¥Ð¡¼¤ò´Þ¤ó¤Ç¤¤¤ë:

       struct ipc_perm sem_perm;
       time_t sem_otime;        /* ºÇ¸å¤ËÁàºî¤·¤¿»þ´Ö */

       time_t sem_ctime;        /* ºÇ¸å¤ËÊѹ¹¤·¤¿»þ´Ö */

       ulong sem_nsems;         /* ½¸¹ç¤ÎÃæ¤Ë¤¢¤ë¥»¥Þ¥Õ¥©¡¼¿ô */

sem_perm
¥»¥Þ¥Õ¥©¡¼½¸¹ç¤Ø¤Î¥¢¥¯¥»¥¹µö²Ä¤ò»ØÄꤹ¤ë ipc_perm ¹½Â¤ÂΡ£
sem_otime
ºÇ¸å¤Ë semop(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿»þ´Ö¡£
sem_ctime
ºÇ¸å¤Ë semctl(2) ¤ò¹Ô¤Ê¤Ã¤Æ¾åµ­¤Î¹½Â¤ÂΤΥá¥ó¥Ð¡¼¤òÊѹ¹¤¹¤ë¤«¡¢¥»¥Þ¥Õ¥©¡¼½¸¹ç¤Ë°¤¹¤ë ¥»¥Þ¥Õ¥©¡¼¤òÊѹ¹¤·¤¿»þ´Ö¡£
sem_nsems
¥»¥Þ¥Õ¥©¡¼½¸¹ç¤ÎÃæ¤Ë¤¢¤ë¥»¥Þ¥Õ¥©¡¼¤Î¿ô¡£ ½¸¹ç¤ÎÃæ¤Ë¤¢¤ë¤½¤ì¤¾¤ì¤Î¥»¥Þ¥Õ¥©¡¼¤ÏÉé¤Ç¤Ê¤¤À°¿ô¤Ë¤è¤Ã¤Æ»²¾È¤µ¤ì¡¢ 0 ¤«¤é sem_nsems-1 ¤Þ¤Ç¤ÎÈÖ¹æ¤ò»ý¤Ä¡£

¥»¥Þ¥Õ¥©¡¼¤Ï struct sem ·¿¤Î¥Ç¡¼¥¿¹½Â¤ÂΤǤ¢¤ê¡¢°Ê²¼¤Î¥á¥ó¥Ð¡¼¤ò´Þ¤ó¤Ç¤¤¤ë:

       int semval;      /* ¥»¥Þ¥Õ¥©¡¼¤ÎÃÍ */

       int sempid;      /* ºÇ¸å¤ËÁàºî¤·¤¿¥×¥í¥»¥¹ ID */

semval
¥»¥Þ¥Õ¥©¡¼ÃÍ: Éé¤Ç¤Ê¤¤À°¿ô¡£
sempid
¤³¤Î¥»¥Þ¥Õ¥©¡¼¤òºÇ¸å¤ËÁàºî¤·¤¿¥×¥í¥»¥¹¤Î ID¡£

¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È

¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥È¤ÏÀµ¤ÎÀ°¿ô (shmid) ¤Ë¤è¤Ã¤Æ¼±Ê̤µ¤ì¡¢ <sys/shm.h> ¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë struct shmid_ds ¹½Â¤ÂΤ˷ë¤Ó¤Ä¤±¤é¤ì¤Æ¤¤¤ë¡£ ¤³¤Î¹½Â¤ÂΤϰʲ¼¤Î¥á¥ó¥Ð¡¼¤ò´Þ¤ó¤Ç¤¤¤ë:

       struct ipc_perm shm_perm;
       size_t shm_segsz;        /* ¥»¥°¥á¥ó¥È¤Î¥µ¥¤¥º */

       pid_t shm_cpid;  /* ºîÀ®¼Ô¤Î¥×¥í¥»¥¹ ID */

       pid_t shm_lpid;  /* ºÇ¸å¤ËÁàºî¤·¤¿¥×¥í¥»¥¹ ID */

       shmatt_t shm_nattch;     /* ¸½ºß¡¢Éղ䷤Ƥ¤¤ë¿ô */

       time_t shm_atime;        /* ºÇ¸å¤ËÉղä·¤¿»þ´Ö */

       time_t shm_dtime;        /* ºÇ¸å¤ËʬΥ¤·¤¿»þ´Ö */

       time_t shm_ctime;        /* ºÇ¸å¤ËÊѹ¹¤·¤¿»þ´Ö */

shm_perm
¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ø¤Î¥¢¥¯¥»¥¹µö²Ä¤ò»ØÄꤷ¤¿ ipc_perm ¹½Â¤ÂΡ£
shm_segsz
¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Î¥Ð¥¤¥È¿ô¡£
shm_cpid
¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤òºîÀ®¤·¤¿¥×¥í¥»¥¹¤Î ID¡£
shm_lpid
ºÇ¸å¤Ë shmat(2) ¤Þ¤¿¤Ï shmdt(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¼Â¹Ô¤·¤¿¥×¥í¥»¥¹¤Î ID¡£
shm_nattch
¤³¤Î¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ò¥á¥â¥ê¤ËÉÕ²Ã(attach)¤·¤Æ¤¤¤ë¥×¥í¥»¥¹¤Î¿ô¡£
shm_atime
ºÇ¸å¤Ë shmat(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿»þ´Ö¡£
shm_dtime
ºÇ¸å¤Ë shmdt(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¹Ô¤Ê¤Ã¤¿»þ´Ö¡£
shm_ctime
ºÇ¸å¤Ë shmctl(2) ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤ò¹Ô¤Ê¤Ã¤Æ¡¢ shmid_ds ¹½Â¤ÂΤòÊѹ¹¤·¤¿»þ´Ö¡£

´ØÏ¢¹àÌÜ

msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3)