LinuxÌṩÁËÄÚ´æÓ³É亯Êýmmap, Ëü°ÑÎļþÄÚÈÝÓ³Éäµ½Ò»¶ÎÄÚ´æÉÏ(׼ȷ˵ÊÇÐéÄâÄÚ´æÉÏ), ͨ¹ý¶ÔÕâ¶ÎÄÚ´æµÄ¶ÁÈ¡ºÍÐÞ¸Ä, ʵÏÖ¶ÔÎļþµÄ¶ÁÈ¡ºÍÐÞ¸Ä, ÏÈÀ´¿´Ò»ÏÂmmapµÄº¯ÊýÉùÃ÷: Í·Îļþ: ÔÐÍ: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offsize); ·µ»ØÖµ: ³É¹¦Ôò·µ»ØÓ³ÉäÇøÆðʼµØÖ·, ʧ°ÜÔò·µ»ØMAP_FAILED(-1). ²ÎÊý: addr: Ö¸¶¨Ó³ÉäµÄÆðʼµØÖ·, ͨ³£ÉèΪNULL, ÓÉϵͳָ¶¨. length: ½«ÎļþµÄ¶à´ó³¤¶ÈÓ³Éäµ½ÄÚ´æ. prot: Ó³ÉäÇøµÄ±£»¤·½Ê½, ¿ÉÒÔÊÇ: PROT_EXEC: Ó³ÉäÇø¿É±»Ö´ÐÐ. PROT_READ: Ó³ÉäÇø¿É±»¶ÁÈ¡. PROT_WRITE: Ó³ÉäÇø¿É±»Ð´Èë. PROT_NONE: Ó³ÉäÇø²»ÄÜ´æÈ¡. flags: Ó³ÉäÇøµÄÌØÐÔ, ¿ÉÒÔÊÇ: MAP_SHARED: ¶ÔÓ³ÉäÇøÓòµÄдÈëÊý¾Ý»á¸´ÖÆ»ØÎļþ, ÇÒÔÊÐíÆäËûÓ³Éä¸ÃÎļþµÄ½ø³Ì¹²Ïí. MAP_PRIVATE: ¶ÔÓ³ÉäÇøÓòµÄдÈë²Ù×÷»á²úÉúÒ»¸öÓ³ÉäµÄ¸´ÖÆ(copy-on-write), ¶Ô´ËÇøÓòËù×öµÄÐ޸IJ»»áд»ØÔÎļþ. ´ËÍ⻹ÓÐÆäËû¼¸¸öflags²»ºÜ³£ÓÃ, ¾ßÌå²é¿´linux Cº¯Êý˵Ã÷. fd: ÓÉopen·µ»ØµÄÎļþÃèÊö·û, ´ú±íÒªÓ³ÉäµÄÎļþ. offset: ÒÔÎļþ¿ªÊ¼´¦µÄÆ«ÒÆÁ¿, ±ØÐëÊÇ·ÖÒ³´óСµÄÕûÊý±¶, ͨ³£Îª0, ±íʾ´ÓÎļþÍ·¿ªÊ¼Ó³Éä. ÏÂÃæËµÒ»ÏÂÄÚ´æÓ³ÉäµÄ²½Öè: ÓÃopenϵͳµ÷Óôò¿ªÎļþ, ²¢·µ»ØÃèÊö·ûfd. ÓÃmmap½¨Á¢ÄÚ´æÓ³Éä, ²¢·µ»ØÓ³ÉäÊ×µØÖ·Ö¸Õëstart. ¶ÔÓ³Éä(Îļþ)½øÐи÷ÖÖ²Ù×÷, ÏÔʾ(printf), ÐÞ¸Ä(sprintf). ÓÃmunmap(void *start, size_t lenght)¹Ø±ÕÄÚ´æÓ³Éä. ÓÃcloseϵͳµ÷ÓùرÕÎļþfd. ×¢ÒâÊÂÏî: ÔÚÐÞ¸ÄÓ³ÉäµÄÎļþʱ, Ö»ÄÜÔÚÔ³¤¶ÈÉÏÐÞ¸Ä, ²»ÄÜÔö¼ÓÎļþ³¤¶È, ÒòΪÄÚ´æÊÇÒѾ·ÖÅäºÃµÄ.
ÔÚÍêÉÆÎÒµÄ¿çÆ½Ì¨µÄ·¢ÓʼþÀà¿âʱ£¬select×öÑÓʱwindowsûЧ¹û£¬LinuxÕý³££¬»¹ÒÔΪÎÒ´úÂëд´íÁËÄØ£»ÔÚÍøÉÏËÑËØÏÂҲû·¢ÏÖÀàËÆËµ·¨£¬ÓÚÊÇÎÒ¾ÍдÁ˶ÎС²âÁË£¬¹ûÈ»selectÑÓʱÔÚwindowsÉÏËõË®ÁË
#include <iostream>
#include <time.h>
#ifdef WIN32
#include <winsock2.h>
#pragma comment(lib,"w ......