shmop

Autres langues

Langue: ja

Version: 2004-11-10 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

shmop, shmat, shmdt - ¶¦Í­¥á¥â¥ê (shared memory) ¤ÎÁàºî

½ñ¼°


#include <sys/types.h>

#include <sys/shm.h>

void *shmat(int shmid, const void *shmaddr, int shmflg);

int shmdt(const void *shmaddr);

ÀâÌÀ

shmat() ¤Ï shmid ¤Ç»ØÄꤵ¤ì¤¿¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È (shared memory segment) ¤ò ¥³¡¼¥ë¤·¤¿¥×¥í¥»¥¹¤Î¥¢¥É¥ì¥¹¶õ´Ö¤ËÉղà (attach) ¤¹¤ë¡£ Éղ乤륢¥É¥ì¥¹¤Ï shmaddr ¤Ë°Ê²¼¤Î¤É¤ì¤«¤Î·Á¼°¤Ç»ØÄꤹ¤ë:

shmaddr ¤¬ NULL ¤Ê¤é¤Ð¡¢¥·¥¹¥Æ¥à¤Ï¥»¥°¥á¥ó¥È¤òÉղ乤뤿¤á¤Î ŬÀÚ¤Ê (»ÈÍѤµ¤ì¤Æ¤¤¤Ê¤¤) ¥¢¥É¥ì¥¹¤òÁªÂò¤¹¤ë¡£

shmaddr ¤¬ NULL ¤Ç¤Ê¤¯ SHM_RND ¤¬ shmflg ¤Ë»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢ shmaddr ¤ò SHMLBA ¤ÎÇÜ¿ô¤Ø¤ÈÀÚ¤ê¼Î¤Æ¤¿ (rounding down) ¤Î¤ÈÅù¤·¤¤¥¢¥É¥ì¥¹¤ØÉղ乤롣 ¤½¤Î¾¤Î¾ì¹ç¤Ï shmaddr ¤ÏÉղäò¹Ô¤Ê¤¦¥¢¥É¥ì¥¹¤Ç¡¢¥Ú¡¼¥¸¶­³¦¤ò»Ø¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¡£

SHM_RDONLY ¤¬ shmflg ¤Ë»ØÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ï¡¢ ¥»¥°¥á¥ó¥È¤ÏÆɤ߹þ¤ßÀìÍѤËÉղ䵤졢¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥°¥á¥ó¥È¤Ø¤Î Æɤ߹þ¤ßµö²Ä¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¤½¤Î¥»¥°¥á¥ó¥È¤ÏÆɤ߹þ¤ß¤È½ñ¤­¹þ¤ß¤Î¤¿¤á¤ËÉղ䵤졢 ¥×¥í¥»¥¹¤Ï¤½¤Î¥»¥°¥á¥ó¥È¤ËÆɤ߹þ¤ß¤È½ñ¤­¹þ¤ß¤Îµö²Ä¤ò»ý¤ÄɬÍפ¬¤¢¤ë¡£ ½ñ¤­¹þ¤ßÀìÍѤζ¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤È¤¤¤¦³µÇ°¤Ï¸ºß¤·¤Ê¤¤¡£

(Linux ÆÃÍ­¤Î) SHM_REMAP ¥Õ¥é¥°¤¬ shmflg ¤Ë»ØÄꤵ¤ì¤¿¾ì¹ç¤Ï¡¢ ¥»¥°¥á¥ó¥È¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò´û¸¤Î¥Þ¥Ã¥Ô¥ó¥°¤ËÃÖ¤­´¹¤¨¤ë¡£ ¥Þ¥Ã¥Ô¥ó¥°¤ÎÈϰϤϡ¢ shmaddr ¤«¤é»Ï¤Þ¤ê¥»¥°¥á¥ó¥È¤Î¥µ¥¤¥ºÊ¬¤À¤±¤¢¤ë (Ä̾ï EINVAL ¥¨¥é¡¼¤Ï¡¢¤³¤Î¥¢¥É¥ì¥¹ÈϰϤ˥ޥåԥ󥰤¬´û¤Ë¸ºß¤¹¤ë¤¿¤á¤Ëµ¯¤ë)¡£ ¤³¤Î¥Õ¥é¥°¤ò»ØÄꤹ¤ë¾ì¹ç¤Ï¡¢ shmaddr ¤¬ NULL ¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£

¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î brk(2) ¤ÎÃͤÏÉղäˤè¤Ã¤ÆÊѲ½¤·¤Ê¤¤¡£ ¤½¤Î¥»¥°¥á¥ó¥È¤Ï¥×¥í¥»¥¹¤¬½ªÎ» (exit) ¤·¤¿¤é¼«Æ°Åª¤ËʬΥ (detach) ¤µ¤ì¤ë¡£ Ʊ¤¸¥»¥°¥á¥ó¥È¤ò¥×¥í¥»¥¹¤Î¥¢¥É¥ì¥¹¶õ´Ö¤Ë¡¢Æɤ߹þ¤ßÀìÍѤª¤è¤ÓÆɤ߽ñ¤­Î¾ÍÑ ¤È¤·¤ÆÉղäǤ­¡¢¤Þ¤¿Ê£¿ô²óÉղ乤뤳¤È¤â¤Ç¤­¤ë¡£

À®¸ù¤·¤¿ shmat() ¥³¡¼¥ë¤Ï¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ë´ØÏ¢¤¹¤ë shmid_ds ¹½Â¤ÂÎ (shmctl(2) ¤ò»²¾È) ¤Î¥á¥ó¥Ð¡¼¤ò°Ê²¼¤Î¤è¤¦¤Ë¹¹¿·¤¹¤ë:

shm_atime ¤Ë¤Ï¸½ºß¤Î»þ¹ï¤òÀßÄꤹ¤ë¡£
shm_lpid ¤Ë¤Ï¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ ID ¤òÀßÄꤹ¤ë¡£
shm_nattch ¤ò 1 Áý²Ã¤µ¤»¤ë¡£

shmdt() ¤Ï¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¥¢¥É¥ì¥¹¶õ´Ö¤«¤é shmaddr ¤Ç»ØÄꤵ¤ì¤¿¥¢¥É¥ì¥¹¤ËÇÛÃÖ¤µ¤ì¤¿¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤òʬΥ (detach) ¤¹¤ë¡£ ʬΥ¤¹¤ë¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ï¡¢¸½ºß shmaddr ¤ËÉղ䵤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ shmaddr ¤Ï¡¢¤½¤ì¤òÉղä·¤¿»þ¤Ë shmat() ¤¬ÊÖ¤·¤¿ÃͤËÅù¤·¤¯¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

À®¸ù¤·¤¿ shmdt() ¥³¡¼¥ë¤Ï¤½¤Î¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ë´ØÏ¢¤¹¤ë shmid_ds ¹½Â¤ÂΤΥá¥ó¥Ð¡¼¤ò°Ê²¼¤Î¤è¤¦¤Ë¹¹¿·¤¹¤ë:

shm_dtime ¤Ë¤Ï¸½ºß¤Î»þ¹ï¤¬ÀßÄꤵ¤ì¤ë¡£
shm_lpid ¤Ë¤Ï¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹ ID ¤¬ÀßÄꤵ¤ì¤ë¡£
shm_nattch ¤ò 1 ¸º¾¯¤µ¤»¤ë¡£ ¤â¤· 0 ¤Ë¤Ê¤ê¡¢ºï½ü¥Þ¡¼¥¯¤¬¤¢¤Ã¤¿¾ì¹ç¤Ï ¤½¤Î¥»¥°¥á¥ó¥È¤Ïºï½ü¤µ¤ì¤ë¡£

fork(2) ¤·¤¿¸å¡¢»Ò¥×¥í¥»¥¹¤ÏÉղ䵤줿¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ò·Ñ¾µ¤¹¤ë¡£

exec(2) ¤·¤¿¸å¡¢Á´¤Æ¤ÎÉղ䵤줿¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ï¥×¥í¥»¥¹¤«¤éʬΥ¤µ¤ì¤ë¡£

exit(2) ¤Ë¤ª¤¤¤Æ¡¢Á´¤Æ¤ÎÉղ䵤줿¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ï¥×¥í¥»¥¹¤«¤éʬΥ¤µ¤ì¤ë¡£

ÊÖ¤êÃÍ

shmat() ¤Ï¡¢À®¸ù¤·¤¿¾ì¹ç¡¢ Éղ䵤줿¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Î¥¢¥É¥ì¥¹¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¡¢ (void *) -1 ¤òÊÖ¤·¡¢ errno ¤Ë¥¨¥é¡¼¤Î¸¶°ø¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£

shmdt() ¤Ï¡¢À®¸ù¤¹¤ë¤È 0 ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¡¢-1 ¤òÊÖ¤·¡¢ errno ¤Ë¥¨¥é¡¼¤Î¸¶°ø¤ò¼¨¤¹ÃͤòÀßÄꤹ¤ë¡£

¥¨¥é¡¼

shmat() ¤¬¼ºÇÔ¤·¤¿¾ì¹ç¡¢ errno ¤Ë°Ê²¼¤ÎÃͤΤɤ줫¤òÀßÄꤷ¤ÆÊÖ¤¹:
EACCES
¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤ËÍ׵ᤵ¤ì¤¿¼ïÎà¤ÎÉղäËɬÍפʵö²Ä¤¬¤Ê¤¯¡¢ CAP_IPC_OWNER ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£ (capability) ¤¬¤Ê¤¤¡£
EINVAL
shmid ¤ÎÃͤ¬ÉÔÀµ¤Ç¤¢¤ë¡£ ¶­³¦°ãÈ¿ (unaligned) (¤Ä¤Þ¤ê¡¢¥Ú¡¼¥¸¶­³¦¤Ë¹ç¤Ã¤Æ¤ª¤é¤º¡¢ SHM_RND ¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤) ¤Þ¤¿¤Ï shmaddr ¤¬ÉÔÀµ¤Ç¤¢¤ë¤«¡¢ brk(2) ¤Ø¤ÎÉղä˼ºÇÔ¤·¤¿¡£ ¤Þ¤¿¤Ï SHM_REMAP ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¤¬¡¢ shmaddr ¤¬ NULL ¤Ç¤¢¤Ã¤¿¡£
ENOMEM
¥Ç¥£¥¹¥¯¥ê¥×¥¿¡¼ (descriptor) ¤ä¥Ú¡¼¥¸¡¦¥Æ¡¼¥Ö¥ë¤Î¤¿¤á¤Î¥á¥â¥ê¤ò ³ä¤êÅö¤Æ¤ë¤³¤È¤¬¤Ç¤­¤Ê¤¤¡£

shmdt() ¤¬¼ºÇÔ¤·¤¿¾ì¹ç¡¢ EINVAL ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¥»¥Ã¥È¤µ¤ì¤ë:

EINVAL
shmaddr ¤ËÉղ䵤줿¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤¬Â¸ºß¤·¤Ê¤¤¡£ ¤â¤·¤¯¤Ï¡¢ shmaddr ¤¬¥Ú¡¼¥¸¶­³¦¤Ë¹ç¤Ã¤Æ¤¤¤Ê¤¤¡£

½àµò

SVr4, POSIX.1-2001.

SVID 3 ¤Ç (¤¿¤Ö¤ó¤½¤ì¤è¤êÁ°¤À¤È»×¤¦¤¬) shmaddr °ú¤­¿ô¤Î·¿¤Ï char * ¤«¤é const void * ¤Ë¡¢shmat() ¤ÎÊÖ¤êÃͤη¿¤Ï char * ¤«¤é void * ¤ËÊѹ¹¤µ¤ì¤¿ (Linux ¤Ç¤Ï libc4 ¤È libc5 ¤Î¥×¥í¥È¥¿¥¤¥×¤Ï char * ¤Ç¤¢¤ê¡¢glibc2 ¤Î¥×¥í¥È¥¿¥¤¥×¤Ï void * ¤Ç¤¢¤ë)¡£

Ãí°Õ

¶¦Í­¥á¥â¥ê¥»¥°¥á¥ó¥È¤òÉղ乤ë¾ì¹ç¤Î°Ü¿¢À­¤Î¹â¤¤ÊýË¡¤È¤·¤Æ¤Ï¡¢ shmaddr ¤ò NULL ¤Ë¤·¤Æ shmat() ¤ò»ÈÍѤ¹¤ë¤Î¤¬¤è¤¤¡£ ¤³¤Î¤è¤¦¤ÊÊýË¡¤ÇÉղ䵤ì¤ë¶¦Í­¥á¥â¥ê¥»¥°¥á¥ó¥È¤Ï¡¢ ¥×¥í¥»¥¹¤¬°Û¤Ê¤ì¤ÐÊ̤Υ¢¥É¥ì¥¹¤ËÉղ䵤ì¤ë¡¢¤È¤¤¤¦ÅÀ¤ËÃí°Õ¤¹¤ë¤³¤È¡£ ¤è¤Ã¤Æ¶¦Í­¥á¥â¥êÆâ¤Ç´ÉÍý¤µ¤ì¤ë¥Ý¥¤¥ó¥¿¤Ï¡¢ ÀäÂÐ¥¢¥É¥ì¥¹¤Ç¤Ï¤Ê¤¯¡¢ (°ìÈÌŪ¤Ë¤Ï¥»¥°¥á¥ó¥È¤Î³«»Ï¥¢¥É¥ì¥¹¤«¤é¤Î) ÁêÂÐ¥¢¥É¥ì¥¹¤ÇºîÀ®¤¹¤ë¤Ù¤­¤Ç¤¢¤ë¡£

Linux ¤Ç¤Ï¶¦Í­¥á¥â¥ê¥»¥°¥á¥ó¥È¤Ë´û¤Ëºï½ü¥Þ¡¼¥¯¤¬ÉÕ¤±¤é¤ì¤Æ¤¤¤Æ¤â¡¢ ¤½¤Î¶¦Í­¥á¥â¥ê¥»¥°¥á¥ó¥È¤òÉղ乤뤳¤È¤¬¤Ç¤­¤ë¡£ ¤·¤«¤· POSIX.1-2001 ¤Ç¤Ï¤³¤Î¤è¤¦¤ÊÆ°ºî¤ò»ØÄꤷ¤Æ¤ª¤é¤º¡¢ ¾¤Î¿¤¯¤Î¼ÂÁõ¤â¤³¤ì¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¡£

°Ê²¼¤Î¥·¥¹¥Æ¥à¡¦¥Ñ¥é¥á¡¼¥¿¡¼¤Ï¡¢ shmat() ¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤Ë±Æ¶Á¤¹¤ë:

SHMLBA ¥»¥°¥á¥ó¥È¤Î¶­³¦¥¢¥É¥ì¥¹¤ÎºÇ¾®ÇÜ¿ô¡£¥Ú¡¼¥¸¶­³¦¤Ë¹ç¤Ã¤Æ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ ¸½ºß¤Î¼ÂÁõ¤Ç¤Ï SHMLBA ¤ÎÃÍ¤Ï PAGE_SIZE ¤Ç¤¢¤ë¡£

¸½ºß¤Î¼ÂÁõ¤Ç¤Ï¡¢¥×¥í¥»¥¹¤´¤È¤Î ¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ÎºÇÂç¿ô (SHMSEG) ¤Ë´Ø¤¹¤ë¼ÂÁõ°Í¸¤ÎÀ©¸Â¤Ï¤Ê¤¤¡£

´ØÏ¢¹àÌÜ

brk(2), mmap(2), shmctl(2), shmget(2), capabilities(7), svipc(7)