shmget

Autres langues

Langue: ja

Version: 2006-05-02 (openSuse - 09/10/07)

Section: 2 (Appels système)

̾Á°

shmget - ¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ò³ä¤êÅö¤Æ¤ë

½ñ¼°

#include <sys/ipc.h> #include <sys/shm.h>

int shmget(key_t key, size_t size, int shmflg);

ÀâÌÀ

shmget() ¤Ï key °ú¤­¿ô¤ËÂбþ¤¹¤ë¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Î¼±Ê̻ҤòÊÖ¤¹¡£ key ¤ÎÃͤ¬ IPC_PRIVATE ¤Î¾ì¹ç¡¢¤â¤·¤¯¤Ï key ¤ËÂбþ¤¹¤ë¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤¬Â¸ºß¤»¤º¡¢ shmflg ¤Ë IPC_CREAT ¤¬»ØÄꤵ¤ì¤Æ¤¤¤¿¾ì¹ç¡¢ ¿·¤·¤¤¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤òºîÀ®¤¹¤ë¡£ ºîÀ®¤µ¤ì¤ë¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ï¡¢ size °ú¤­¿ô¤ÎÃͤò PAGE_SIZE ¤ÎÇÜ¿ô¤Ø¤ÈÀÚ¤ê¾å¤²¤¿ (round up) Â礭¤µ¤È¤Ê¤ë¡£

shmflg ¤Ë IPC_CREAT ¤È IPC_EXCL ¤ÎξÊý¤¬»ØÄꤵ¤ì¤¿¾ì¹ç¡¢ key ¤ËÂбþ¤¹¤ë¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤¬´û¤Ë¸ºß¤¹¤ë¤È¡¢ shmget() ¤Ï¼ºÇÔ¤·¡¢ errno ¤Ë EEXIST ¤¬ÀßÄꤵ¤ì¤ë (¤³¤ì¤Ï open(2) ¤Ë O_CREAT | O_EXCL ¤ò»ØÄꤷ¤¿¾ì¹ç¤ÎÆ°ºî¤ÈƱ¤¸¤Ç¤¢¤ë)¡£

shmflg ¤Ï°Ê²¼¤ÎÆâÍƤ«¤é¹½À®¤µ¤ì¤ë:

IPC_CREAT
¿·¤·¤¤¥»¥°¥á¥ó¥È¤òºîÀ®¤¹¤ë¡£¤³¤Î¥Õ¥é¥°¤¬»ØÄꤵ¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¡¢ shmget() ¤Ï key ¤ËÂбþ¤¹¤ë¥»¥°¥á¥ó¥È¤òõ¤·¡¢ ¥æ¡¼¥¶¤¬¤½¤Î¥»¥°¥á¥ó¥È¤Ë¥¢¥¯¥»¥¹¤¹¤ëµö²Ä¤¬¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£
IPC_EXCL
IPC_CREAT ¤È¶¦¤Ë»ÈÍѤ·¡¢¥»¥°¥á¥ó¥È¤¬´û¤Ë¸ºß¤·¤¿¾ì¹ç¤Ë¤Ï ¼ºÇÔ¤¹¤ë¤³¤È¤òÊݾڤ¹¤ë¡£
mode_flags
(²¼°Ì 9 ¥Ó¥Ã¥È) ½êÍ­¼Ô¡¢¥°¥ë¡¼¥×¡¢Â¾¿Í (world) ¤Ø¤Îµö²Ä¤ò»ØÄꤹ¤ë¡£ ¤³¤ì¤é¤Î¥Ó¥Ã¥È¤Ï open(2) ¤Î mode °ú¤­¿ô¤ÈƱ¤¸·Á¼°¤ÇƱ¤¸°ÕÌ£¤ò»ý¤Ä¡£ º£¤Î¤È¤³¤í¡¢¥·¥¹¥Æ¥à¤Ï¼Â¹Ô (execute) µö²Ä¤ò»²¾È¤·¤Ê¤¤¡£
SHM_HUGETLB (Linux 2.6 °Ê¹ß)
"¥Ò¥å¡¼¥¸¥Ú¡¼¥¸ (huge page)" ¤ò»È¤¦¥»¥°¥á¥ó¥È¤ò³ä¤êÅö¤Æ¤ë¡£ ¾ÜºÙ¤Ê¾ðÊó¤Ï¡¢¥«¡¼¥Í¥ë¡¦¥½¡¼¥¹¤Î¥Õ¥¡¥¤¥ë Documentation/vm/hugetlbpage.txt ¤ò»²¾È¡£
SHM_NORESERVE (Linux 2.6.15 °Ê¹ß)
¤³¤Î¥Õ¥é¥°¤Ï¡¢ mmap(2) ¤Î MAP_NORESERVE ¥Õ¥é¥°¤ÈƱ¤¸Ìò³ä¤ò²Ì¤¿¤¹¡£ ¤³¤Î¥»¥°¥á¥ó¥È¤ËÂФ¹¤ë¥¹¥ï¥Ã¥×¶õ´Ö¤ÎͽÌó¤ò¹Ô¤ï¤Ê¤¤¡£ ¥¹¥ï¥Ã¥×¶õ´Ö¤òͽÌó¤·¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥»¥°¥á¥ó¥È¤ÎÊѹ¹¤¬É¬¤ºÀ®¸ù¤¹¤ë¤³¤È¤¬ Êݾڤµ¤ì¤ë¡£¥¹¥ï¥Ã¥×¶õ´Ö¤ÎͽÌó¤ò¹Ô¤ï¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢ÊªÍý¥á¥â¥ê¤Ë¶õ¤­¤¬ ¤Ê¤¤¤È½ñ¤­¹þ¤ß»þ¤Ë SIGSEGV ¤ò¼õ¤±¼è¤ë²ÄǽÀ­¤¬¤¢¤ë¡£ proc(5) ¤Ë¤¢¤ë /proc/sys/vm/overcommit_memory ¥Õ¥¡¥¤¥ë¤Ë´Ø¤¹¤ëµÄÏÀ¤â»²¾È¤Î¤³¤È¡£

¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤¬¿·¤¿¤ËºîÀ®¤µ¤ì¤ëºÝ¡¢ ¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ÎÆâÍÆ¤Ï 0 ¤Ç½é´ü²½¤µ¤ì¡¢ ´ØÏ¢¾ðÊó¤òÊÝ»ý¤¹¤ë¥Ç¡¼¥¿¹½Â¤ÂÎ shmid_ds ¤Ï°Ê²¼¤Î¤è¤¦¤Ë½é´ü²½¤µ¤ì¤ë¡£

shm_perm.cuid ¤È shm_perm.uid ¤Ë¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î¼Â¸ú (effective) ¥æ¡¼¥¶¡¼ID ¤òÀßÄꤹ¤ë¡£
shm_perm.cgid ¤È shm_perm.gid ¤Ë¸Æ¤Ó½Ð¤·¸µ¥×¥í¥»¥¹¤Î¼Â¸ú¥°¥ë¡¼¥×ID ¤òÀßÄꤹ¤ë¡£
shm_perm.mode ¤Î²¼°Ì 9 ¥Ó¥Ã¥È¤Ë shmflg ¤Î²¼°Ì 9 ¥Ó¥Ã¥È¤òÀßÄꤹ¤ë¡£
shm_segsz ¤Ë size ¤ÎÃͤòÀßÄꤹ¤ë¡£
shm_lpid, shm_nattch, shm_atime, shm_dtime ¤Ë 0 ¤òÀßÄꤹ¤ë¡£
shm_ctime ¤Ë¸½ºß¤Î»þ¹ï¤òÀßÄꤹ¤ë¡£

¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤¬´û¤Ë¸ºß¤¹¤ë¾ì¹ç¡¢¥¢¥¯¥»¥¹µö²Ä¤Î¸¡ºº¤È¡¢ Ç˲õ (destruction) ¥Þ¡¼¥¯¤¬¤Ä¤±¤é¤ì¤Æ¤¤¤Ê¤¤¤«¤Î¥Á¥§¥Ã¥¯¤¬¹Ô¤ï¤ì¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç¡¢Í­¸ú¤Ê¥»¥°¥á¥ó¥È¼±ÊÌ»Ò shmid ¤¬ÊÖ¤µ¤ì¤ë¡£¥¨¥é¡¼¤Î¾ì¹ç¡¢ -1 ¤¬ÊÖ¤µ¤ì¤ë¡£

¥¨¥é¡¼

¼ºÇÔ¤·¤¿¾ì¹ç¤Ï errno ¤¬°Ê²¼¤Î¤É¤ì¤«¤ËÀßÄꤵ¤ì¤ë:
EACCES
¥æ¡¼¥¶¡¼¤Ï¤½¤Î¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Ø¤Î¥¢¥¯¥»¥¹µö²Ä¤ò»ý¤¿¤º¡¢ CAP_IPC_OWNER ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤â»ý¤Ã¤Æ¤¤¤Ê¤¤¡£
EEXIST
IPC_CREAT | IPC_EXCL ¤¬»ØÄꤵ¤ì¤Æ¤¤¤¿¤¬¡¢¤½¤Î¥»¥°¥á¥ó¥È¤¬´û¤Ë¸ºß¤¹¤ë¡£
EINVAL
¿·¤·¤¤¥»¥°¥á¥ó¥È¤òºîÀ®¤·¤è¤¦¤È¤·¤¿ºÝ¤Ë size < SHMMIN ¤Þ¤¿¤Ï size > SHMMAX ¤Ç¤¢¤Ã¤¿¡£ ¤â¤·¤¯¤Ï¡¢»ØÄꤵ¤ì¤¿¥­¡¼¤ËÂбþ¤¹¤ë¥»¥°¥á¥ó¥È¤¬´û¤Ë¸ºß¤·¤Æ¡¢¿·¤·¤¤ ¥»¥°¥á¥ó¥È¤òºîÀ®¤·¤è¤¦¤È¤Ï¤·¤Ê¤«¤Ã¤¿¤¬¡¢size ¤¬Â¸ºß¤¹¤ë¥»¥°¥á¥ó¥È¤Î ¥µ¥¤¥º¤è¤ê¤âÂ礭¤«¤Ã¤¿¡£
ENFILE
¥·¥¹¥Æ¥àÁ´ÂΤǥª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ÎÁí¿ô¤¬¾å¸Â¤Ë㤷¤¿¡£
ENOENT
»ØÄꤵ¤ì¤¿ key ¤ËÂбþ¤¹¤ë¥»¥°¥á¥ó¥È¤¬Â¸ºß¤»¤º¡¢ IPC_CREAT ¤â»ØÄꤵ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¡£
ENOMEM
¥»¥°¥á¥ó¥È¤Î´ÉÍý¾ðÊó (overhead) ¤Ë³ä¤êÅö¤Æ¤ë¥á¥â¥ê¤¬¤Ê¤«¤Ã¤¿¡£
ENOSPC
¥·¥¹¥Æ¥àÁ´ÂΤζ¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¿ô¤ÎÀ©¸Â (SHMMNI) ¤Ë㤷¤¿¡¢¤Þ¤¿¤ÏÍ׵ᤵ¤ì¤¿ size ¤Î¥»¥°¥á¥ó¥È¤Î³ä¤êÅö¤Æ¤¬ ¥·¥¹¥Æ¥àÁ´ÂΤζ¦Í­¥á¥â¥ê¥µ¥¤¥º¤ÎÀ©¸Â (SHMALL) ¤òĶ²á¤·¤¿¡£
EPERM
SHM_HUGETLB ¥Õ¥é¥°¤¬»ØÄꤵ¤ì¤¿¤¬¡¢¸Æ¤Ó½Ð¤·¸µ¤Ë¤Ï¸¢¸Â¤¬¤Ê¤«¤Ã¤¿ (CAP_IPC_LOCK ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿)¡£

½àµò

SVr4, POSIX.1-2001.

SHM_HUGETLB ¤Ï Linux ¤Ç¤Î³ÈÄ¥¤Ç¤¢¤ê¡¢°Ü¿¢À­¤Ï¤Ê¤¤¡£

Ãí°Õ

IPC_PRIVATE ¤Ï¥Õ¥é¥°¤Ç¤Ï¤Ê¤¯ key_t ·¿¤Ç¤¢¤ë¡£ ¤³¤ÎÆÃÊ̤ÊÃͤ¬ key ¤Ë»ÈÍѤµ¤ì¤¿¾ì¹ç¤Ï¡¢ shmget() ¤Ï shmflg ¤Î²¼°Ì 9 ¥Ó¥Ã¥È¤ò½ü¤¤¤¿Á´¤Æ¤ò̵»ë¤·¡¢ (À®¸ù¤¹¤ì¤Ð) ¿·¤·¤¤¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤òºîÀ®¤¹¤ë¡£

shmget() ¥³¡¼¥ë¤Ë±Æ¶Á¤¹¤ë¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È»ñ¸»¤ÎÀ©¸Â¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¢¤ë:

SHMALL
¥·¥¹¥Æ¥àÁ´ÂΤζ¦Í­¥á¥â¥ê¡¦¥Ú¡¼¥¸¤ÎºÇÂç¿ô (Linux ¤Ç¤Ï¡¢¤³¤Î¾å¸ÂÃÍ¤Ï /proc/sys/kernel/shmall ·Ðͳ¤Ç»²¾È¤·¤¿¤ê¡¢Êѹ¹¤·¤¿¤ê¤Ç¤­¤ë)¡£
SHMMAX
¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Î¥Ð¥¤¥Èñ°Ì¤ÎÂ礭¤µ¤Î¾å¸Â: Êý¿Ë°Í¸ (Linux ¤Ç¤Ï¡¢¤³¤Î¾å¸ÂÃÍ¤Ï /proc/sys/kernel/shmmax ·Ðͳ¤Ç»²¾È¤·¤¿¤ê¡¢Êѹ¹¤·¤¿¤ê¤Ç¤­¤ë)¡£
SHMMIN
¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤Î¥Ð¥¤¥Èñ°Ì¤ÎÂ礭¤µ¤Î²¼¸Â: ¼ÂÁõ°Í¸ (¸½ºß¤Ï 1 ¥Ð¥¤¥È¤À¤¬¡¢¼Â¼ÁŪ¤ÊºÇ¾®¥µ¥¤¥º¤Ï PAGE_SIZE ¤Ç¤¢¤ë)¡£
SHMMNI
¥·¥¹¥Æ¥àÁ´ÂΤζ¦Í­¥á¥â¥ê¡¼¤Î¿ô¤Î¾å¸Â: ¼ÂÁõ°Í¸ (¸½ºß¤Ï 4096¡£Linux 2.3.99 ¤è¤êÁ°¤Ç¤Ï 128¡£ Linux ¤Ç¤Ï¡¢¤³¤Î¾å¸ÂÃÍ¤Ï /proc/sys/kernel/shmmni ·Ðͳ¤Ç»²¾È¤·¤¿¤ê¡¢Êѹ¹¤·¤¿¤ê¤Ç¤­¤ë)¡£

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

Linux ¤Ç¤ÎÃí°Õ

¥Ð¡¼¥¸¥ç¥ó 2.3.30 ¤Þ¤Ç¤Ï¡¢Linux ¤Ï ºï½ü¤¬Í½Äꤵ¤ì¤Æ¤¤¤ë¶¦Í­¥á¥â¥ê¡¦¥»¥°¥á¥ó¥È¤ËÂФ·¤Æ shmget() ¤¬¹Ô¤ï¤ì¤ë¤È EIDRM ¤òÊÖ¤·¤Æ¤¤¤¿¡£

¥Ð¥°

IPC_PRIVATE ¤È¤¤¤¦Ì¾Á°¤òÁª¤ó¤À¤Î¤Ï¤ª¤½¤é¤¯¼ºÇԤǤ¢¤í¤¦¡£ IPC_NEW ¤ÎÊý¤¬¤è¤êÌÀ³Î¤Ë¤½¤Îµ¡Ç½¤òɽ¤·¤Æ¤¤¤ë¤À¤í¤¦¡£

´ØÏ¢¹àÌÜ

shmat(2), shmctl(2), shmdt(2), ftok(3), capabilities(7), svipc(7)