Home :: International :: Manuals :: Howto :: FAQ :: Man Pages :: Email Login

 
 

 

MMAP

Section: Linux Programmer's Manual (2)
Updated: 25 March 2000
Index Return to Main Contents
 

̾Á°

mmap, munmap - ¥Õ¥¡¥¤¥ë¤ä¥Ç¥Ð¥¤¥¹¤ò¥á¥â¥ê¤Ë¥Þ¥Ã¥×/¥¢¥ó¥Þ¥Ã¥×¤¹¤ë  

½ñ¼°

#include <unistd.h>
#include <sys/mman.h>

#ifdef _POSIX_MAPPED_FILES

void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset);

int munmap(void *start, size_t length);

#endif  

ÀâÌÀ

mmap ´Ø¿ô¤Ï¡¢¥Õ¥¡¥¤¥ëµ­½Ò»Ò (file descriptor) fd ¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë(¤â¤·¤¯¤Ï¤½¤Î¾¤Î¥ª¥Ö¥¸¥§¥¯¥È)¤Î¡¢¥ª¥Õ¥»¥Ã¥È offset ¤«¤é length ¥Ð¥¤¥È¤ÎÈϰϤò¥á¥â¥ê¤Ë¥Þ¥Ã¥×¤¹¤ë(¥á¥â¥ê¤ËÄ¥¤êÉÕ¤±¤ë)¡£ ¤³¤Î¤È¤­¡¢¤Ê¤ë¤Ù¤¯¥á¥â¥ê¾å¤Î start ¥¢¥É¥ì¥¹¤«¤é¤Ï¤¸¤á¤ë¤è¤¦¤Ë¥Þ¥Ã¥×¤¹¤ë¡£¤³¤Î¥¢¥É¥ì¥¹¤Ï¼ÂºÝ¤Ï´Ø¿ô¤ËÂФ·¤Æ ¤Î¥Ò¥ó¥È¤Ç¤·¤«¤Ê¤¯¡¢Ä̾ï¤Ï 0 ¤ò»ØÄꤹ¤ë¡£ ¼ÂºÝ¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤¬¥Þ¥Ã¥×¤µ¤ì¤¿¥¢¥É¥ì¥¹¤Ï mmap ¤¬ÊÖ¤êÃͤ˥»¥Ã¥È¤¹¤ë¡£ °ú¿ô prot ¤Ë¤Ï¥á¥â¥êÊݸî¤ò¤É¤Î¤è¤¦¤Ë¹Ô¤Ê¤¦¤«¤ò»ØÄꤹ¤ë (¥Õ¥¡¥¤¥ë¤Î¥ª¡¼¥×¥ó¥â¡¼¥É¤È¾×ÆÍ¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤)¡£ °Ê²¼¤Î¤è¤¦¤Ê¥Ó¥Ã¥È¥Ç¡¼¥¿¤¬Â¸ºß¤¹¤ë¡£
PROT_EXEC
¥Ú¡¼¥¸¤Ï¼Â¹Ô²Äǽ¤Ç¤¢¤ë¡£
PROT_READ
¥Ú¡¼¥¸¤ÏÆÉ¤ß¹þ¤ß²Äǽ¤Ç¤¢¤ë¡£
PROT_WRITE
¥Ú¡¼¥¸¤Ë½ñ¤­¹þ¤ß²Äǽ¤Ç¤¢¤ë¡£
PROT_NONE
¥Ú¡¼¥¸¤Ë¤Ï¥¢¥¯¥»¥¹¤Ç¤­¤Ê¤¤¡£

°ú¿ô flags ¤Ë¤Ï¡¢¥Þ¥Ã¥×¤µ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¿¥¤¥×¡¢¥Þ¥Ã¥×»þ¤Î¥ª¥×¥·¥ç¥ó¤È¤È¤â¤Ë¡¢ ¥Þ¥Ã¥×¤µ¤ì¤¿¥Ú¡¼¥¸¥³¥Ô¡¼¤Ø¤ÎÊѹ¹¤ò¹Ô¤¨¤ë¤Î¤¬¸Æ¤Ó½Ð¤·¥×¥í¥»¥¹¤À¤±¤Ê¤Î¤«¡¢ ¤½¤ì¤È¤â¤½¤Î¥Ú¡¼¥¸¤ò»²¾È¤¹¤ë¾¤Î¥×¥í¥»¥¹¤«¤é¤â²Äǽ¤Ê¤Î¤«¤ò»ØÄꤹ¤ë¡£ °Ê²¼¤Î¤è¤¦¤Ê¥Ó¥Ã¥È¥Ç¡¼¥¿¤¬Â¸ºß¤¹¤ë¡£

MAP_FIXED
»ØÄꤵ¤ì¤¿¥¢¥É¥ì¥¹°Ê³°¤Î¥¢¥É¥ì¥¹¤Ë¥Þ¥Ã¥Ô¥ó¥°¤ò¹Ô¤Ê¤ï¤Ê¤¤¡£ ¤â¤·»ØÄꤵ¤ì¤¿¥¢¥É¥ì¥¹¤¬»ÈÍѤǤ­¤Ê¤¤¾ì¹ç¡¢ mmap ¤Ï¼ºÇÔ¤¹¤ë¡£ MAP_FIXED ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï start ¤Ï¥Ú¡¼¥¸¥µ¥¤¥º¤ÎÇÜ¿ô¤Ç¤Ê¤¯¤Æ¤Ï¤¤¤±¤Ê¤¤¡£ ¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï»ÈÍѤ·¤Ê¤¤Êý¤¬Îɤ¤¡£
MAP_SHARED
¤³¤Î¥Þ¥Ã¥Ô¥ó¥°¤ò¡¢¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¥Þ¥Ã¥×¤·¤¿Â¾¤ÎÁ´¤Æ¤Î¥×¥í¥»¥¹¤È¶¦Í­¤¹¤ë¡£ ¤³¤ÎÎÎ°è¤Ø¤ÎÊݸ¤Ï¡¢¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤­¹þ¤ß¤ÈÅù²Á¤Ç¤¢¤ë¡£ ¤¿¤À¤·¥Õ¥¡¥¤¥ë¤¬¼ÂºÝ¤Ë¹¹¿·¤µ¤ì¤ë¤Î¤Ï¡¢ msync(2) ¤Þ¤¿¤Ï munmap(2) ¤¬¸Æ¤Ð¤ì¤¿¤È¤­¤Ç¤¢¤ë¡£
MAP_PRIVATE
¥×¥é¥¤¥Ù¡¼¥È¤Ê copy-on-write (½ñ¤­¹þ¤ß»þ¥³¥Ô¡¼) ¥Þ¥Ã¥×¤òÀ¸À®¤¹¤ë¡£ ¤³¤ÎÎÎ°è¤Ø¤Î½ñ¤­¹þ¤ß¤Ï¡¢¥ª¥ê¥¸¥Ê¥ë¤Î¥Õ¥¡¥¤¥ë¤Ë±Æ¶Á¤·¤Ê¤¤¡£

MAP_SHARED ¤È MAP_PRIVATE ¤Ï¡¢É¬¤º¤É¤Á¤é¤«¤Ò¤È¤Ä¤ò »ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

°Ê¾å¤Î3¤Ä¤Î¥Õ¥é¥°¤Ï POSIX.1b (°ÊÁ°¤Î POSIX.4) ¤Çµ¬Äꤵ¤ì¤Æ¤¤¤ë¡£ Linux ¤Ë¤Ï¤³¤Î¾¤Ë MAP_DENYWRITE, MAP_EXECUTABLE, MAP_NORESERVE, MAP_LOCKED, MAP_GROWSDOWN and MAP_ANON(YMOUS) ¤¬¤¢¤ë¡£

offset ¤ÏÄ̾ï getpagesize(2) ¤ÎÊÖ¤¹¥Ú¡¼¥¸¥µ¥¤¥º¤ÎÀ°¿ôÇܤǤʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

¥·¥¹¥Æ¥à¥³¡¼¥ë munmap ¤Ï»ØÄꤵ¤ì¤¿¥¢¥É¥ì¥¹ÈϰϤΥޥåפò¾Ãµî¤·¡¢ °Ê¹ß¤Î¤½¤ÎÈÏ°ÏÆâ¤Ø¤Î»²¾È¤ò̵¸ú¤Ê¥á¥â¥ê»²¾È¤Ë¤¹¤ë¡£ ¤³¤ÎÎΰè¤Ï¡¢¥×¥í¥»¥¹¤¬½ªÎ»¤·¤¿¤È¤­¤Ë¤â¼«Æ°Åª¤Ë¥¢¥ó¥Þ¥Ã¥×¤µ¤ì¤ë¡£ °ìÊý¡¢¥Õ¥¡¥¤¥ëµ­½Ò»Ò¤ò¥¯¥í¡¼¥º¤·¤Æ¤â¡¢¤³¤ÎÎΰè¤Ï¥¢¥ó¥Þ¥Ã¥×¤µ¤ì¤Ê¤¤¡£

 

ÊÖ¤êÃÍ

mmap ¤ÏÀ®¸ù¤¹¤ë¤È¥Þ¥Ã¥×¤µ¤ì¤¿ÎÎ°è¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ¼ºÇÔ¤¹¤ë¤È MAP_FAILED (-1) ¤òÊÖ¤·¡¢ errno ¤¬¥¨¥é¡¼¤ÎÆâÍÆ¤Ë¤·¤¿¤¬¤Ã¤Æ¥»¥Ã¥È¤µ¤ì¤ë¡£ munmap ¤ÏÀ®¸ù¤¹¤ë¤È 0 ¤òÊÖ¤¹¡£¼ºÇÔ¤¹¤ë¤È -1 ¤òÊÖ¤·¡¢ errno ¤¬¥»¥Ã¥È¤µ¤ì¤ë (¤ª¤½¤é¤¯ EINVAL ¤Ë¤Ê¤ë¤À¤í¤¦)¡£  

¥¨¥é¡¼

EBADF
fd ¤¬Í­¸ú¤Ê¥Õ¥¡¥¤¥ëµ­½Ò»Ò (file descriptor) ¤Ç¤Ï¤Ê¤¤ (¤«¤Ä MAP_ANONYMOUS ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤)¡£
EACCES
MAP_PRIVATE ¤òÍ׵ᤷ¤¿¤¬ fd ¤ÏÆÉ¤ß¹þ¤ßÍѤ˥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤¤¡£ ¤Þ¤¿¤Ï MAP_SHARED ¤òÍ׵ᤷ¤Æ PROT_WRITE ¤ò¥»¥Ã¥È¤·¤¿¤¬¡¢ fd ¤ÏÆÉ¤ß½ñ¤­¥â¡¼¥É (O_RDWR) ¤Ç¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤Ê¤¤¡£
EINVAL
start ¤« length ¤« offset ¤¬¼õ¤±ÉÕ¤±¤é¤ì¤Ê¤¤¡£ (¤Ä¤Þ¤êÂ礭¤¹¤®¤ë¤«¡¢ PAGESIZE ¶­³¦¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤Æ¤¤¤Ê¤¤)
ETXTBSY
MAP_DENYWRITE ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤¬ fd ¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ï½ñ¤­¹þ¤ßÍѤ˳«¤«¤ì¤Æ¤¤¤ë¡£
EAGAIN
¥Õ¥¡¥¤¥ë¤¬¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë¡£¤Þ¤¿¤Ï¥í¥Ã¥¯¤µ¤ì¤Æ¤¤¤ë¥á¥â¥ê¤¬Â¿¤¹¤®¤ë¡£
ENOMEM
¥á¥â¥ê¤Ë¶õ¤­¤¬¤Ê¤¤¡£

¥Þ¥Ã¥×Îΰè¤ÎÍøÍѤ˺ݤ·¡¢°Ê²¼¤Î¥·¥°¥Ê¥ë¤¬È¯À¸¤¹¤ë¤³¤È¤¬¤¢¤ë:

SIGSEGV
ÆÉ¤ß¹þ¤ßÀìÍÑ¤Ç mmap ¤µ¤ì¤¿ÎÎ°è¤Ø½ñ¤­¹þ¤ß¤ò¹Ô¤ª¤¦¤È¤·¤¿¡£
SIGBUS
¥Ð¥Ã¥Õ¥¡¤Î¤¦¤Á¡¢¥Õ¥¡¥¤¥ë¤Ë´ØÏ¢¤Å¤±¤é¤ì¤Æ¤¤¤Ê¤¤Éôʬ¤Ë¥¢¥¯¥»¥¹¤ò¹Ô¤ª¤¦¤È¤·¤¿ (Î㤨¤Ð¥Õ¥¡¥¤¥ëËöÈø¤ò±Û¤¨¤¿Éôʬ¤Ê¤É¡£ ¾¤Î¥×¥í¥»¥¹¤¬¥Õ¥¡¥¤¥ë¤òÀÚ¤êµÍ¤á¤¿¾ì¹ç¤Ê¤É¤â¹Í¤¨¤é¤ì¤ë)¡£
 

½àµò

SVr4, POSIX.1b (°ÊÁ°¤Ï POSIX.4), 4.4BSD¡£SVr4 ¤Ë¤Ï¾¤Ë ENXIO ¤È ENODEV ¤Î¥¨¥é¡¼¥³¡¼¥É¤Ë¤Ä¤¤¤Æ¤Îµ­½Ò¤¬¤¢¤ë¡£  

´ØÏ¢¹àÌÜ

getpagesize(2), msync(2), shm_open(2), B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.


 

Index

̾Á°
½ñ¼°
ÀâÌÀ
ÊÖ¤êÃÍ
¥¨¥é¡¼
½àµò
´ØÏ¢¹àÌÜ

 
 
 
 
Google
  Web Linuxinfor   
 

Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account

Document on this page is part of "Linuxinfor Man Pages in HTML Format: man2". See Index Page for more info about Authorship and Copyright.

1999-2008 Linuxinfor.com. No rights reserved.