Rechercher une page de manuel
shmop
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)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre