ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

ÓÃmmapдLinuxÓû§¿Õ¼äÇý¶¯
2014-11-24 08:20:32 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:0´Î
Tags£ºmmap Linux Óû§ ¿Õ¼ä Çý¶¯

Ò»¡¢ mmapº¯Êý½âÎö£º


º¯ÊýÔ­ÐÍ£º


#include
void *mmap(void *start, size_t length£¬int prot£¬ int flags£¬int fd£¬off_t offset)£»
int munmap(void *start, size_t length)£»


º¯Êý¹¦ÄÜ£º
mmap½«Ò»¸öÎļþ»òÕ߯äËü¶ÔÏóÓ³Éä½øÄÚ´æ¡£Îļþ±»Ó³Éäµ½¶à¸öÒ³ÉÏ£¬Èç¹ûÎļþµÄ´óС²»ÊÇËùÓÐÒ³µÄ´óС֮ºÍ£¬×îºóÒ»¸öÒ³²»±»Ê¹ÓõĿռ佫»áÇåÁã¡£munmapÖ´ÐÐÏà·´µÄ²Ù×÷£¬É¾³ýÌØ¶¨µØÖ·ÇøÓòµÄ¶ÔÏóÓ³Éä¡£


²ÎÊý˵Ã÷£º


start£ºÓ³ÉäÇøµÄ¿ªÊ¼µØÖ·¡£
length£ºÓ³ÉäÇøµÄ³¤¶È¡£
prot£ºÆÚÍûµÄÄÚ´æ±£»¤±êÖ¾£¬²»ÄÜÓëÎļþµÄ´ò¿ªÄ£Ê½³åÍ»¡£ÊÇÒÔϵÄij¸öÖµ£¬¿ÉÒÔͨ¹ýorÔËËãºÏÀíµØ×éºÏÔÚÒ»Æð
PROT_EXEC //Ò³ÄÚÈÝ¿ÉÒÔ±»Ö´ÐÐ
PROT_READ //Ò³ÄÚÈÝ¿ÉÒÔ±»¶ÁÈ¡
PROT_WRITE //Ò³¿ÉÒÔ±»Ð´Èë
PROT_NONE //Ò³²»¿É·ÃÎÊ
flags£ºÖ¸¶¨Ó³Éä¶ÔÏóµÄÀàÐÍ£¬Ó³ÉäÑ¡ÏîºÍÓ³ÉäÒ³ÊÇ·ñ¿ÉÒÔ¹²Ïí¡£ËüµÄÖµ¿ÉÒÔÊÇÒ»¸ö»òÕß¶à¸öÒÔÏÂλµÄ×éºÏÌå
MAP_FIXED //ʹÓÃÖ¸¶¨µÄÓ³ÉäÆðʼµØÖ·£¬Èç¹ûÓÉstartºÍlen²ÎÊýÖ¸¶¨µÄÄÚ´æÇøÖصþÓÚÏÖ´æµÄÓ³Éä¿Õ¼ä£¬Öصþ²¿·Ö½«»á±»¶ªÆú¡£Èç¹ûÖ¸¶¨µÄÆðʼµØÖ·²»¿ÉÓ㬲Ù×÷½«»áʧ°Ü¡£²¢ÇÒÆðʼµØÖ·±ØÐëÂäÔÚÒ³µÄ±ß½çÉÏ¡£
MAP_SHARED //ÓëÆäËüËùÓÐÓ³ÉäÕâ¸ö¶ÔÏóµÄ½ø³Ì¹²ÏíÓ³Éä¿Õ¼ä¡£¶Ô¹²ÏíÇøµÄдÈ룬Ï൱ÓÚÊä³öµ½Îļþ¡£Ö±µ½msync()»òÕßmunmap()±»µ÷Óã¬Îļþʵ¼ÊÉϲ»»á±»¸üС£
MAP_PRIVATE //½¨Á¢Ò»¸öдÈëʱ¿½±´µÄ˽ÓÐÓ³Éä¡£ÄÚ´æÇøÓòµÄдÈë²»»áÓ°Ïìµ½Ô­Îļþ¡£Õâ¸ö±êÖ¾ºÍÒÔÉϱêÖ¾ÊÇ»¥³âµÄ£¬Ö»ÄÜʹÓÃÆäÖÐÒ»¸ö¡£
MAP_DENYWRITE //Õâ¸ö±êÖ¾±»ºöÂÔ¡£
MAP_EXECUTABLE //ͬÉÏ
MAP_NORESERVE //²»ÒªÎªÕâ¸öÓ³Éä±£Áô½»»»¿Õ¼ä¡£µ±½»»»¿Õ¼ä±»±£Áô£¬¶ÔÓ³ÉäÇøÐ޸ĵĿÉÄÜ»áµÃµ½±£Ö¤¡£µ±½»»»¿Õ¼ä²»±»±£Áô£¬Í¬Ê±ÄÚ´æ²»×㣬¶ÔÓ³ÉäÇøµÄÐ޸ĻáÒýÆð¶ÎÎ¥ÀýÐźš£
MAP_LOCKED //Ëø¶¨Ó³ÉäÇøµÄÒ³Ãæ£¬´Ó¶ø·ÀÖ¹Ò³Ãæ±»½»»»³öÄÚ´æ¡£
MAP_GROWSDOWN //ÓÃÓÚ¶ÑÕ»£¬¸æËßÄÚºËVMϵͳ£¬Ó³ÉäÇø¿ÉÒÔÏòÏÂÀ©Õ¹¡£
MAP_ANONYMOUS //ÄäÃûÓ³É䣬ӳÉäÇø²»ÓëÈκÎÎļþ¹ØÁª¡£
MAP_ANON //MAP_ANONYMOUSµÄ±ð³Æ£¬²»ÔÙ±»Ê¹Óá£
MAP_FILE //¼æÈݱêÖ¾£¬±»ºöÂÔ¡£
MAP_32BIT //½«Ó³ÉäÇø·ÅÔÚ½ø³ÌµØÖ·¿Õ¼äµÄµÍ2GB£¬MAP_FIXEDÖ¸¶¨Ê±»á±»ºöÂÔ¡£µ±Ç°Õâ¸ö±êÖ¾Ö»ÔÚx86-64ƽ̨Éϵõ½Ö§³Ö¡£
MAP_POPULATE //ΪÎļþÓ³Éäͨ¹ýÔ¤¶ÁµÄ·½Ê½×¼±¸ºÃÒ³±í¡£Ëæºó¶ÔÓ³ÉäÇøµÄ·ÃÎʲ»»á±»Ò³Î¥Àý×èÈû¡£
MAP_NONBLOCK //½öºÍMAP_POPULATEÒ»ÆðʹÓÃʱ²ÅÓÐÒâÒå¡£²»Ö´ÐÐÔ¤¶Á£¬Ö»ÎªÒÑ´æÔÚÓÚÄÚ´æÖеÄÒ³Ãæ½¨Á¢Ò³±íÈë¿Ú¡£
fd£ºÓÐЧµÄÎļþÃèÊö´Ê¡£Èç¹ûMAP_ANONYMOUS±»É趨£¬ÎªÁ˼æÈÝÎÊÌ⣬ÆäֵӦΪ-1¡£
offset£º±»Ó³Éä¶ÔÏóÄÚÈÝµÄÆðµã¡£


·µ»ØÖµËµÃ÷£º


³É¹¦Ö´ÐÐʱ£¬mmap()·µ»Ø±»Ó³ÉäÇøµÄÖ¸Õ룬munmap()·µ»Ø0¡£Ê§°Üʱ£¬mmap()·µ»ØMAP_FAILED[ÆäֵΪ(void *)-1]£¬munmap·µ»Ø-1¡£errno±»ÉèΪÒÔϵÄij¸öÖµ
EACCES£º·ÃÎʳö´í
EAGAIN£ºÎļþÒѱ»Ëø¶¨£¬»òÕßÌ«¶àµÄÄÚ´æÒѱ»Ëø¶¨
EBADF£ºfd²»ÊÇÓÐЧµÄÎļþÃèÊö´Ê
EINVAL£ºÒ»¸ö»òÕß¶à¸ö²ÎÊýÎÞЧ
ENFILE£ºÒѴﵽϵͳ¶Ô´ò¿ªÎļþµÄÏÞÖÆ
ENODEV£ºÖ¸¶¨ÎļþËùÔÚµÄÎļþϵͳ²»Ö§³ÖÄÚ´æÓ³Éä
ENOMEM£ºÄÚ´æ²»×㣬»òÕß½ø³ÌÒѳ¬³ö×î´óÄÚ´æÓ³ÉäÊýÁ¿
EPERM£ºÈ¨Äܲ»×㣬²Ù×÷²»ÔÊÐí
ETXTBSY£ºÒÑдµÄ·½Ê½´ò¿ªÎļþ£¬Í¬Ê±Ö¸¶¨MAP_DENYWRITE±êÖ¾
SIGSEGV£ºÊÔ×ÅÏòÖ»¶ÁÇøÐ´Èë
SIGBUS£ºÊÔ×Å·ÃÎʲ»ÊôÓÚ½ø³ÌµÄÄÚ´æÇø


¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºARM-LinuxÏÂZLG7290 I2CÇý¶¯³ÌÐò.. ÏÂһƪ£ºÀûÓÃbochsµ÷ÊÔÒýµ¼³ÌÐòºÍLinuxÄÚºË

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Spring Boot Java£º (2025-12-26 16:20:19)
¡¤Spring Boot¤ÇHello (2025-12-26 16:20:15)
¡¤Spring ¤Î»ù±¾¤«¤éŒ (2025-12-26 16:20:12)
¡¤C++Ä£°å (template) (2025-12-26 15:49:49)
¡¤C ÓïÑÔÖÐÄ£°åµÄ¼¸ÖÖ (2025-12-26 15:49:47)