̽Ë÷Linux»º´æ»úÖÆ£ºÄÚ´æ¡¢´ÅÅ̺ÍÎļþϵͳµÄ»º´æÏê½â
ÉîÈëÏàʶLinux»º´æ»úÖÆ£ºÄڴ滺´æ¡¢´ÅÅÌ»º´æºÍÎļþϵͳ»º´æ
µ¼¶Á£ºÔÚLinuxϵͳÖУ¬»º´æÊÇÒ»ÖÖÖ÷ÒªµÄ»úÖÆ£¬ÓÃÓÚ¼ÓËÙÊý¾Ý»á¼ûºÍÌá¸ßϵͳÐÔÄÜ¡£±¾ÎĽ«ÉîÈë̽ÌÖLinuxÖеÄÈýÖÖ»º´æ»úÖÆ£ºÄڴ滺´æ¡¢´ÅÅÌ»º´æºÍÎļþϵͳ»º´æ£¬²¢ÌṩÏêϸ´úÂëʾÀý£¬ÒÔ×ÊÖú¶ÁÕ߸üºÃµØÃ÷È·ºÍʹÓÃÕâЩ»º´æ»úÖÆ¡£
Ò»¡¢Äڴ滺´æ
Äڴ滺´æÊÇÖ¸Linuxϵͳ½«´ÅÅÌÉϵÄÎļþÊý¾Ý»º±£´æÄÚ´æÖУ¬ÒÔïÔ̶ԴÅÅ̵ÄƵÈÔ¶Áд£¬´Ó¶ø¼ÓËÙÊý¾Ý»á¼ûËÙÂÊ¡£LinuxϵͳÖеÄÄڴ滺´æÖ÷ÒªÓÉpage cache×é³É¡£µ±Ó¦ÓóÌÐò¶ÁÈ¡Ò»¸öÎļþʱ£¬²Ù×÷ϵͳ»á½«ÎļþµÄÄÚÈݶÁÈ¡µ½page cacheÖУ¬²¢½«ÆäÉúÑÄÔÚÄÚ´æÖС£Ï´ÎÔÙ¶ÁÈ¡¸ÃÎļþʱ£¬²Ù×÷ϵͳÊ×Ïȼì²épage cacheÖÐÊÇ·ñ±£´æ¸ÃÎļþµÄ»º´æÊý¾Ý£¬ÈôÊDZ£´æ£¬ÔòÖ±½Ó´Ó»º´æÖжÁÈ¡£¬¶ø²»ÊÇÔٴλá¼û´ÅÅÌ¡£ÕâÖÖ»úÖÆ¿ÉÒÔÏÔÖøÌá¸ßÎļþ»á¼ûËÙÂÊ¡£
ÒÔÏÂÊÇÒ»¸ö¼òÆÓµÄC´úÂëʾÀý£¬Õ¹Ê¾ÁËÔõÑùʹÓÃÄڴ滺´æ£º
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/mman.h> int main() { int fd; struct stat sb; char *file_data; // ·¿ªÎļþ fd = open("test.txt", O_RDONLY); if (fd == -1) { perror("open"); exit(1); } // »ñÈ¡Îļþ¾Þϸ if (fstat(fd, &sb) == -1) { perror("fstat"); exit(1); } // ½«ÎļþÓ³Éäµ½ÄÚ´æÖÐ file_data = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (file_data == MAP_FAILED) { perror("mmap"); exit(1); } // ͨ¹ýÄÚ´æ»á¼ûÎļþÄÚÈÝ printf("%s", file_data); // ɨ³ýÄÚ´æÓ³Éä if (munmap(file_data, sb.st_size) == -1) { perror("munmap"); exit(1); } // ¹Ø±ÕÎļþ close(fd); return 0; }
µÇ¼ºó¸´ÖÆ
ÉÏÊö´úÂëʹÓÃÁËmmapº¯Êý½«ÎļþÓ³Éäµ½ÄÚ´æÖУ¬²¢Í¨¹ýÖ¸Õëfile_data»á¼ûÎļþÄÚÈÝ¡£Í¨¹ýÕâÖÖ·½·¨£¬ÎļþµÄÄÚÈݽ«±»»º±£´æÄÚ´æÖУ¬Ï´λá¼ûʱ¿ÉÒÔÖ±½Ó¶ÁÈ¡ÎļþÄÚÈÝ£¬¶ø²»ÐèÒªÔٴλá¼û´ÅÅÌ¡£
¶þ¡¢´ÅÅÌ»º´æ
³ýÁËÄڴ滺´æÍ⣬LinuxϵͳÉÐÓÐÒ»¸öÖ÷ÒªµÄ»º´æ»úÖÆÊÇ´ÅÅÌ»º´æ¡£´ÅÅÌ»º´æÊÇÖ¸LinuxʹÓÃÒ»²¿·ÖÄÚ´æ×÷Ϊ´ÅÅÌI/OµÄ»º´æ£¬ÒÔÌá¸ß´ÅÅÌ»á¼ûµÄÐÔÄÜ¡£µ±Ó¦ÓóÌÐò¾ÙÐдÅÅ̶Áд²Ù×÷ʱ£¬²Ù×÷ϵͳ»áÊ×ÏȽ«Êý¾Ý»º±£´æÄÚ´æÖУ¬È»ºóÔÙ½«Êý¾ÝдÈë´ÅÅÌ¡£ÕâÖÖ»úÖÆ¿ÉÒÔïÔ̶ԴÅÅ̵ÄƵÈÔ»á¼û£¬Ìá¸ß´ÅÅ̵ĶÁдЧÂÊ¡£
ÒÔÏÂÊÇÒ»¸ö¼òÆÓµÄC´úÂëʾÀý£¬Õ¹Ê¾ÁËÔõÑùʹÓôÅÅÌ»º´æ£º
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> int main() { int fd; char buffer[512]; // ·¿ªÎļþ fd = open("test.txt", O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR); if (fd == -1) { perror("open"); exit(1); } // дÈëÎļþ write(fd, buffer, sizeof(buffer)); // Ë¢ÐÂÎļþ»º³å fsync(fd); // ¹Ø±ÕÎļþ close(fd); return 0; }
µÇ¼ºó¸´ÖÆ
ÉÏÊö´úÂëʹÓÃÁËwriteº¯Êý½«Êý¾ÝдÈëÎļþ£¬²¢Í¨¹ýfsyncº¯ÊýË¢ÐÂÎļþ»º³å¡£Í¨¹ýÕâÖÖ·½·¨£¬Êý¾Ý»áÊ×Ïȱ»»º±£´æÄÚ´æÖУ¬È»ºóÔÙͳһдÈë´ÅÅÌ¡£ÕâÖÖ»úÖÆ¿ÉÒÔÏÔÖøÌá¸ß´ÅÅ̵ÄдÈëÐÔÄÜ¡£
Èý¡¢Îļþϵͳ»º´æ
Îļþϵͳ»º´æÊÇÖ¸LinuxϵͳÖеÄÎļþϵͳʹÓõĻº´æ£¬ÓÃÓÚ¼ÓËÙÎļþϵͳµÄ»á¼û¡£Îļþϵͳ»º´æÖ÷ÒªÓÉÎļþϵͳÊý¾Ý½á¹¹ºÍÔªÊý¾Ý£¨ÈçÎļþȨÏÞ¡¢½¨Éèʱ¼äµÈ£©×é³É¡£µ±Ó¦ÓóÌÐò¾ÙÐÐÎļþϵͳ²Ù×÷ʱ£¬²Ù×÷ϵͳ»á½«Ïà¹ØÊý¾Ý»º±£´æÄÚ´æÖУ¬ÒÔÌá¸ßÎļþϵͳµÄ»á¼ûËÙÂÊ¡£
ÒÔÏÂÊÇÒ»¸ö¼òÆÓµÄC´úÂëʾÀý£¬Õ¹Ê¾ÁËÔõÑùʹÓÃÎļþϵͳ»º´æ£º
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> int main() { int fd; // ·¿ªÎļþ fd = open("test.txt", O_RDONLY); if (fd == -1) { perror("open"); exit(1); } // ÐÞ¸ÄÎļþȨÏÞ if (fchmod(fd, S_IRUSR | S_IWUSR) == -1) { perror("fchmod"); exit(1); } // ¹Ø±ÕÎļþ close(fd); return 0; }
µÇ¼ºó¸´ÖÆ
ÉÏÊö´úÂëʹÓÃÁËfchmodº¯ÊýÐÞ¸ÄÎļþµÄȨÏÞ¡£Í¨¹ýÕâÖÖ·½·¨£¬ÎļþµÄÏà¹ØÐÅÏ¢»á±»»º±£´æÄÚ´æÖУ¬ÔÚºóÐøµÄÎļþ»á¼ûÖпÉÒÔÖ±½ÓʹÓã¬Ìá¸ßÁËÎļþ²Ù×÷µÄЧÂÊ¡£
½áÓ
±¾ÎÄÉîÈë̽ÌÖÁËLinuxÖеÄÈýÖÖ»º´æ»úÖÆ£ºÄڴ滺´æ¡¢´ÅÅÌ»º´æºÍÎļþϵͳ»º´æ£¬²¢ÌṩÁËÏêϸµÄ´úÂëʾÀý¡£Í¨¹ýÏàʶºÍʹÓÃÕâЩ»º´æ»úÖÆ£¬¿ÉÒÔÌá¸ßϵͳµÄÐÔÄÜ£¬²¢¼ÓËÙÊý¾Ý»á¼ûËÙÂÊ¡£Ï£Íû±¾ÎĶԶÁÕßÃÇÃ÷È·ºÍÓ¦ÓÃLinux»º´æ»úÖÆÓÐËù×ÊÖú¡£
ÒÔÉϾÍÊÇ̽Ë÷Linux»º´æ»úÖÆ£ºÄÚ´æ¡¢´ÅÅ̺ÍÎļþϵͳµÄ»º´æÏê½âµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡