LinuxÎļþϵͳµÄ×ÀÃæÓ¦ÓÃ

January 6th, 2009
¡¡¡¡´«Í³µÄ Linux Îļþϵͳ³ÊÏÖ¸øÓû§³ÌÐòµÄ½çÃæ£¬È·ÊµÊÇÊ®·ÖµÄ¸É¾»ÀûÂä¡£Óû§³ÌÐò¿ÉÒÔ´ò¿ªÒ»¸öÎļþ£¬ÏòÎļþÖÐÏßÐÔµÄдÈëÊý¾Ý£¬´ÓÎļþµÄijһλÖÿªÊ¼£¬ÏßÐԵĶÁ³öÊý¾Ý£¬¹Ø±ÕÒ»¸öÎļþ£¬É¾³ýÒ»¸öÎļþ£¬´´½¨Ò»¸öÎļþ£¬µÈµÈ¡£Çë¿´£¬Ö»ÓÐÕâôÈô¸É¸ö¼ò½àµÄ²Ù×÷Ô­Ó¿ÉÊÇÈ´ÄÜÌṩÕâô¶à·á¸»µÄÓ¦Óᣵ«ÊÇ£¬ÎÒÃÇ×¢Òâµ½£¬ÓÃÓÚ·ÃÎÊ Linux µÄÎļþϵͳµÄÕâЩ²Ù×÷Ô­Ó²¢Ã»ÓÐÌṩ·Ç³£¸´ÔӵļÓËø½âËøµÄ¹¦ÄÜ¡£ÕâÊÇÒ»¼þºÜÆæÃîµÄÊÂÇ飬Èç¹ûÀ´×Ô²»Í¬µÄÓû§³ÌÐòµÄÇëÇó·¢ÉúÁ˳åÍ»Ôõô°ìÄØ£¿
¡¡¡¡
¡¡¡¡ÎÒÃDz»·Á×ßµÄÔÙ¿¿½üÒ»µã£¬×ÐϸµÄ¿´¿´É¾³ýÒ»¸öÎļþÊÇÔõÑù½øÐеġ£Èç¹ûÒѾ­ÓÐÒ»¸öÓû§³ÌÐòÔÚ·ÃÎÊÒ»¸öÎļþ£¬¶øÁíÍâÒ»¸öÓû§³ÌÐòÕýºÃҪɾ³ýÕâÒ»¸öÎļþ£¬Õâʱ»á·¢ÉúÐ©Ê²Ã´ÄØ£¿ÎÒÃÇÖªµÀ£¬Linux µÄÎļþϵͳÊÇ»ùÓÚËùνµÄ inode µÄ£¬Ã¿¸öÎļþ¶¼Ïà°éÓÐÒ»¸ö inode¡£ÔÚ inode ÖмǼÁ˹ØÓÚÕâ¸öÎļþµÄһЩϵͳÐÅÏ¢£¬±ÈÈçÎļþµÄËùÓÐÕߣ¬ÎļþÏà¹ØµÄһЩȨÏ޼Ǽ£¬¹ØÓÚÎļþµÄÈô¸É¸öʱ¼ä´Á£¬µÈµÈ¡£ÔÚÄÚ´æÖÐµÄ inode »¹Î¬³Ö×ÅÒ»¸ö¹ØÓÚ×Ô¼ºµÄʹÓüÆÊý¡£Ã¿µ±Ò»¸ö inode Ëù´ú±íµÄÎļþ±»´ò¿ªÒ»´Î£¬Õâ¸ö inode ¾Í°Ñ¹ØÓÚ×Ô¼ºµÄʹÓüÆÊý¼ÓÒ»¡£Ã¿µ±Õâ¸ö inode Ëù´ú±íµÄÎļþÒ»±»¹Ø±Õ£¬Õâ¸ö inode ¾Í°Ñ¹ØÓÚ×Ô¼ºµÄʹÓüÆÊý¼õÒ»¡£µ±Óû§³ÌÐòɾ³ýÒ»¸öÎļþµÄʱºò£¬Ïà¹ØµÄϵͳµ÷Óúܿì¾Í·µ»Øµ½Õâ¸öÓû§³ÌÐò£¬¸æËßËü£¬ÏàÓ¦µÄÎļþÒѾ­±»É¾³ýÁË¡£µ«ÊÇÏàÓ¦µÄ inode »¹ÊDZ£ÁôÔÚϵͳÖУ¬inode Ê×ÏÈÒª¼ì²é×Ô¼ºµÄʹÓüÆÊý£¬Èç¹ûʹÓüÆÊýΪÁ㣬ÄÇô Linux Kernel ²Å¿ÉÒÔÕæÕýµÄȥɾ³ýÕâ¸öÎļþ¡£Èç¹ûʹÓüÆÊý´óÓÚÁ㣬Ҳ¾ÍÊÇ˵£¬»¹ÓÐÆäËüµÄÓû§³ÌÐòÔÚ·ÃÎÊÕâÒ»¸öÎļþ£¬ÄÇô Linux Kernel ÐèÒªµÈ´ýÕâЩÆäËûµÄÓû§³ÌÐòÒ»¸ö¸ö¶¼Íê³É¶ÔÕâÒ»¸öÎļþµÄ·ÃÎʲÅÐС£Ò²¾ÍÊÇ˵£¬ÒªµÈµ½Õâ¸ö inode µÄʹÓüÆÊýµôµ½Á㣬²ÅÄÜÕæÕýµÄȥɾ³ýÕâÒ»¸öÎļþ¡£
¡¡¡¡
¡¡¡¡ÎÒÃÇ¿ÉÒÔÉèÏëһϣ¬Èç¹ûÓÐÒ»¸ö MP3 ²¥·Å³ÌÐòÔÚ²¥·ÅÒ»Ê× MP3 ÒôÀÖ£¬ÎÒÃǾõµÃËü²»ºÃÌý£¬¾Íµ½Ó²ÅÌÉÏÕÒµ½Õâ¸öÎļþ£¬°ÑËü rm µôÁË¡£Õâʱºò£¬MP3 ²¥·Å³ÌÐò²¢²»Êܵ½Ó°Ï죬»¹ÊÇ¿ÉÒÔ¼ÌÐø²¥·ÅÕâÊ× MP3 ÒôÀÖ£¬ËäÈ»ÕâʱºòÔÚÎļþϵͳÉÏÓà ls ÒѾ­ÕÒ²»µ½Õâ¸ö MP3 ÒôÀÖÎļþÁË¡£Êµ¼ÊÉÏ£¬Ò»Ö±Òªµ½ MP3 ²¥·Å³ÌÐòÍ£Ö¹²¥·ÅÕâÊ× MP3 ÒôÀÖ£¬È»ºó Linux Îļþϵͳ²ÅÕæÕýµÄ´ÓÓ²ÅÌÉÏɾ³ýÕâ¸ö MP3 Îļþ¡£Õâ¸ö¾­ÑéºÍÎÒÃÇÔÚ Windows ƽ̨ÉÏÓöµ½µÄ½ØÈ»²»Í¬¡£
¡¡¡¡
¡¡¡¡ÔÚ Windows ƽ̨ÉÏ£¬µ±ÎÒÃÇÊÔͼÔÚÎļþ¼Ð´°¿ÚÖÐÓÃÊó±êµã»÷ÓÒ¼ü²Ëµ¥É¾³ý Winamp ÕýÔÚ²¥·ÅµÄÒ»Ê× MP3 ÒôÀÖµÄʱºò£¬Windows ϵͳ»áÓÃÒ»¸öµ¯³ö¶Ô»°¿ò¸æËßÎÒÃÇ£¬Õâ¸öÎļþÕýÔÚ±»Ê¹Óã¬Ã»°ì·¨É¾³ý¡£Windows ϵͳµÄ¹ØÓÚɾ³ýÎļþµÄÕâÑùÒ»¸ö½âÊÍ£¬Èç¹ûʹÓò»µ±µÄ»°£¬»á´øÀ´Ò»¸ö»¬»ü¿ÉЦµÄÎÊÌâ¡£ÎÒÃÇ¿ÉÒÔÉèÏëһϣ¬Óû§µÄÒ»¸ö P2P µÄÎļþ¹²Ïí³ÌÐòÌṩÁËÒ»¸ö MP3 ÎļþÒÔ¹©±ðÈËÏÂÔØ£¬Ç¡ÇÉÕâ¸ö MP3 ÒôÀÖÎļþÊ®·ÖµÄÈÈÃÅ£¬²»¶ÏµÄÓÐÈËÀ´ÏÂÔØ£¬Õâ¸öÓû§×îÖÕ¾ö¶¨Òª½ÚʡһÏ´ø¿í£¬ÏëÒª°ÑÕâ¸ö MP3 ÒôÀÖÎļþɾ³ýµô£¬µ«ÊÇ Windows ϵͳȴ²»ÔÊÐíÓû§ÕâÑù×ö£¬ÒòΪÕâ¸ö P2P µÄÎļþ¹²Ïí³ÌÐò×ÜÊÇÔÚʹÓÃÕâ¸ö MP3 Îļþ¡£Óû§ÒªÏëɾ³ýÕâ¸öÎļþ£¬²»µÃ²»Ï顄 P2P µÄÎļþ¹²Ïí³ÌÐò¸øÍ£ÏÂÀ´£¡ºÇºÇ¡£
¡¡¡¡
¡¡¡¡µ«ÊÇ Linux µÄÎļþϵͳµÄ²Ù×÷Ô­ÓïÒ²ÓÐËü×Ô¼ºµÄÎÊÌâ¡£ÎÒÃÇÖªµÀ£¬ÔÚÒ»¸ö Linux Shell µÄÃüÁîÐÐÉÏ£¬ÏÈ rm£¬È»ºóÔÙ ls£¬·Ç³£µÄ¸É¾»£¬±» rm µÄÎļþûÓÐÁË£¬±»É¾³ýÁË¡£µ«ÊÇÎÒÃÇ¿ÉÒÔÉèÏëÓÐÒ»¸öͼÐνçÃæµÄÎļþ¹ÜÀí³ÌÐò£¬µ±Óû§´Ó Shell µÄÃüÁîÐÐÉÏ rm µôÒ»¸öÎļþµÄʱºò£¬Õâ¸öͼÐνçÃæµÄÎļþ¹ÜÀí³ÌÐò²¢Ã»ÓÐÊÕµ½ÈκÎÈË·¢¸øËüµÄÈκÎÏûÏ¢£¬Ëü»¹ÒÔΪʲô¶¼Ã»Óз¢Éú£¬±»É¾³ýµôµÄÎļþ»¹ÔÚÄǶù¡£ÕâʵÔÚÊÇºÜ U.G.L.Y. °¡¡£
¡¡¡¡
¡¡¡¡ÄÇôҪÏë½â¾öÕâ¸öÎÊÌ⣬һ¸öÃ÷ÏԵĵ«ÊǷdz£²»ºÃµÄ°ì·¨£¬¾ÍÊÇÈÃÒ»¸öºǫ́½ø³Ì Daemon ÿ¸ôÒ»¸öºÜ¶ÌµÄʱ¼ä¼ä¸ô£¬¾Í¼ì²éÒ»ÏÂÎļþϵͳÉÏÕâ¸öĿ¼µÄÇé¿ö£¬¿´¿´ÓÐûÓз¢Éúʲô±ä»¯¡£Õâ¸ö°ì·¨µÄȱµãÕæµÄÊÇÏÔ¶øÒ×¼ûµÄ£¬²»µ«ÏµÍ³µÄÐÔÄÜÊܵ½Ó°Ï죬¶øÇÒËüµÄ·´Ó¦Ò²»¹²»ÊÇʵʱµÄ¡£
¡¡¡¡
¡¡¡¡Èç¹ûÎÒÃÇÐèÒªÓû§³ÌÐòÄܹ»ÊµÊ±µØÁ˽âÎļþϵͳÉÏijһ¸öĿ¼µÄ±ä»¯Çé¿ö£¬´ÓʵʱÕâ¸ö½Ç¶È³ö·¢£¬ÏÔÈ»£¬ÎÒÃÇÐèÒªÓÐÒ»¸öÖжϻúÖÆ¡£ÎÒÃǶ¼ÖªµÀ£¬Ó²¼þÖжÏÄܹ»ÊµÊ±µØ°Ñϵͳijһ¸ö²¿¼þµÄÇé¿ö·´Ó³¸øÖÐÑë´¦ÀíÆ÷£¬Í¬ÑùµÄ£¬ÒªÏë°ÑλÓÚϵͳÄÚºËÖеÄÎļþϵͳµÄÇé¿öʵʱµØ·´Ó³¸øÓû§³ÌÐò£¬ÎÒÃÇÒ²ÐèÒªÒ»¸öÓɲÙ×÷ϵͳÄں˵½´ïÓû§½ø³ÌµÄÈí¼þÖжϻúÖÆ¡£ÊìϤ Linux ϵͳ±à³ÌµÄ¶ÁÕßÅóÓÑÃÇÁ¢¼´¾Í»áÏëµ½£¬Õâ¸öÖжϻúÖÆÔÚ Linux ϵͳÖÐÔçÒѾÍÓÐÁË£¬Õâ¾ÍÊÇÐźŴ«µÝ signal¡£
¡¡¡¡
¡¡¡¡ÕÒµ½ÁËÐźŴ«µÝÕâÑùÒ»¸öÖжÏÓû§½ø³ÌµÄ»úÖÆ£¬Ò»ÇÐËÆºõ¶¼ÒÑÆë±¸£¬¿´À´¿ÉÒÔ¶¯ÊÖʵÏÖÕâÑùÒ»¸ö Linux ÎļþϵͳµÄÊØ»¤Éñ£¬À´ÊµÊ±µØ¼àÊÓÎļþϵͳµÄ±ä»¯Çé¿ö£¬²¢ÇÒ¼°Ê±µØ°ÑÏûϢ֪ͨ¸øÓû§³ÌÐòÁË¡£²»¹ýÇÒÂý£¬ÈÃÎÒÃÇËÑË÷һϠLinux Kernel£¬¿´¿´ÊÇ·ñÓбðÈËÒ²ÔÚ×öͬÑùµÄ¹¤×÷¡£¹þ¹þ£¬¹û²»ÆäÈ»£¬Ô­À´ÕâÑùÒ»¸öʵʱµØ¼àÊÓÎļþϵͳÇé¿öµÄ»úÖÆÔçÒÑÔÚ Linux ÄÚºËÖÐʵÏÖÁË¡£ÏÂÃæÒ»¶Î¾ÍÊÇÈ¡×Ô Linux Kernel ÎĵµµÄÒ»¶ÎССÀý³Ì£¬ËµÃ÷ÁË Linux Kernel ÖÐµÄ dnotify ¹¦ÄܵÄÓ÷¨¡£dnotify ¾ÍÊÇÖ¸ directory notification£¬¼àÊÓÎļþϵͳÉÏÒ»¸öĿ¼ÖеÄÇé¿ö¡£
¡¡¡¡
¡¡¡¡#define _GNU_SOURCE /* needed to get the defines */
¡¡¡¡#include /* in glibc 2.2 this has the needed
¡¡¡¡ values defined */
¡¡¡¡#include
¡¡¡¡#include
¡¡¡¡#include
¡¡¡¡
¡¡¡¡static volatile int event_fd;
¡¡¡¡// ÐźŴ¦ÀíÀý³Ì
¡¡¡¡static void handler(int sig, siginfo_t *si, void *data)
¡¡¡¡{
¡¡¡¡ event_fd = si->si_fd;
¡¡¡¡}
¡¡¡¡
¡¡¡¡int main(void)
¡¡¡¡{
¡¡¡¡ struct sigaction act;
¡¡¡¡ int fd;
¡¡¡¡
¡¡¡¡ // µÇ¼ÇÐźŴ¦ÀíÀý³Ì
¡¡¡¡ act.sa_sigaction = handler;
¡¡¡¡ sigemptyset(&act.sa_mask);
¡¡¡¡ act.sa_flags = SA_SIGINFO;
¡¡¡¡ sigaction(SIGRTMIN, &act, NULL);
¡¡¡¡
¡¡¡¡ // ÐèÒªÁ˽⵱ǰĿ¼"."µÄÇé¿ö
¡¡¡¡ fd = open(".", O_RDONLY);
¡¡¡¡ fcntl(fd, F_SETSIG, SIGRTMIN);
¡¡¡¡ fcntl(fd, F_NOTIFY, DN_MODIFY|DN_CREATE|DN_MULTISHOT);
¡¡¡¡ /* we will now be notified if any of the files
¡¡¡¡ in "." is modified or new files are created */
¡¡¡¡ while (1) {
¡¡¡¡ // ÊÕµ½Ðźź󣬾ͻáÖ´ÐÐÐźŴ¦ÀíÀý³Ì¡£
¡¡¡¡ // ¶ø pause() Ò²¾Í½áÊøÁË¡£
¡¡¡¡ pause();
¡¡¡¡ printf("Got event on fd=%dn", event_fd);
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡ÉÏÃæÕâһС¶ÎÀý³Ì£¬¶ÔÓÚÊìϤ Linux ϵͳ±à³ÌµÄ¶ÁÕßÅóÓÑÃÇÀ´Ëµ£¬ÊǺÜÈÝÒ×Àí½âµÄ¡£³ÌÐòÊ×ÏÈ×¢²áÒ»¸öÐźŴ¦ÀíÀý³Ì£¬È»ºó֪ͨ Kernel£¬ÎÒÒª¹Û²ì fd É쵀 DN_MODIFY ºÍ DN_CREATE ºÍ DN_MULTISHOT ʼþ¡££¨¹ØÓÚÕâЩʼþµÄÏêϸ¶¨Ò壬Çë¶ÁÕßÅóÓÑÃDzÎÔÄÎĺóËùÁеIJο¼×ÊÁÏ¡££© Linux Kernel ÊÕµ½Õâ¸öÇëÇóºó£¬°ÑÏàÓ¦µÄ fd µÄ inode ¸ø×öÉϼǺţ¬È»ºó Linux Kernel ºÍÓû§Ó¦ÓóÌÐò¾Í×Ô¹Ë×ÔÈ¥´¦Àí¸÷×ԵıðµÄÊÂÇéÈ¥ÁË¡£µÈµ½ inode ÉÏ·¢ÉúÁËÏàÓ¦µÄʼþ£¬Linux Kernel ¾Í°ÑÐźŷ¢¸øÓû§½ø³Ì£¬ÓÚÊÇ¿ªÊ¼Ö´ÐÐÐźŴ¦ÀíÀý³Ì£¬Óû§³ÌÐò¶ÔÎļþϵͳÉϵı仯Ҳ¾Í¿ÉÒÔ¼°Ê±µÄ×ö³ö·´Ó¦ÁË¡£¶øÔÚÕâÕû¸ö¹ý³ÌÖУ¬ÏµÍ³ÒÔ¼°Óû§³ÌÐòµÄÕý³£ÔËÐлù±¾ÉÏδÊܵ½ÐÔÄÜÉϵÄÓ°Ïì¡£ÕâÀﻹÐèҪ˵Ã÷µÄÊÇ£¬dnotify ²¢Ã»ÓÐͨ¹ýÔö¼ÓеÄϵͳµ÷ÓÃÀ´Íê³ÉËüµÄ¹¦ÄÜ£¬¶øÊÇͨ¹ý fcntl À´Íê³ÉÈÎÎñµÄ¡£Ôö¼ÓÒ»¸öϵͳµ÷Óã¬Ïà¶ÔÀ´ËµÊÇÒ»¸öºÜ´óµÄÊÖÊõ£¬¶øÇÒÈç¹ûÉè¼Æ²»µ±£¬´¦ÀíµÃ²»ºÃµÄ»°£¬É˰̻áÒ»Ö±ÁôÔÚÄÇÀÕâÊÇ Linux Kernel µÄ¿ª·¢ÕßÃÇËù·Ç³£²»Ô¸Òâ¼ûµ½µÄÊÂÇé¡£
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡Linux ÎļþϵͳµÄÒì²½ I/O À©Õ¹
¡¡¡¡
¡¡¡¡
¡¡¡¡¶ÔÓÚ×ÀÃæ¼ÆËã»úϵͳÀ´Ëµ£¬Äܹ»¿ìËÙµÄÏìÓ¦Óû§µÄÇëÇó£¬ÕâÒ²ÊÇÊ®·Ö¹Ø¼üµÄ¡£»»¾ä»°Ëµ£¬µ±Óû§Òƶ¯Êó±êµÄʱºò£¬²»¹ÜϵͳÕýÔÚ½øÐÐʲôÌì´óµÄ¡¢ÖØÒªµÄ¡¢ÉñÊ¥µÄ¡¢²»¿É´ò¶ÏµÄ¹¤×÷£¬Ëü¶¼µÃÁ¢¼´Í£Ï£¬²¢ÇÒÒªÈÃÊó±êÁ¢¼´Á÷³©µÄÔÚ¼ÆËã»úÆÁÄ»ÉÏÍêÃÀµØÔ˶¯ÆðÀ´¡£¶ÔÓÚϰ¹ßÔÚ´«Í³µÄ Linux ÃüÁîÐÐÉϹ¤×÷µÄ¶ÁÕßÅóÓÑÃÇÀ´Ëµ£¬ÈÃÊó±êÄܹ»ÔÚÈκÎʱ¼ä¶¼¿ÉÒÔÔÚ¼ÆËã»úÆÁÄ»ÉÏÏòÎÞÍ·²ÔÓ¬Ò»ÑùµØÂÒ´Ü£¬¾¹È»±»µ±³ÉÊÇ×îÖØÒªµÄϵͳÈÎÎñ£¬ÕâʵÔÚÓÐÒ»µãÈÃÈËÄÑÒÔ½ÓÊÜ¡£²»¹ý£¬µ±Äã´Ó Linux ÃüÁîÐÐÉÏ×ªÒÆµ½ GNOME »òÕß KDE ÕâÑùµÄͼÐνçÃæµÄÓû§»·¾³µÄʱºò£¬Êó±ê±»ËøËÀ£¬°Ù·ÖÖ®°ÙµÄÒ²ÊÇ»áÈÃÄãʧȥÀíÖǵġ£ËùÒÔ£¬»¹ÊÇÈÃÎÒÃǽÓÊÜÕâÒ»¸öÏÖʵ£¬¿´Ò»¿´ÈçºÎ²ÅÄÜÔö¼ÓϵͳµÄÏìÓ¦ËٶȰɡ£
¡¡¡¡
¡¡¡¡´ÓÎļþϵͳµÄ½Ç¶È½²£¬ÌرðÊÇ¿¼Âǵ½ÍøÂçÎļþϵͳ£¬ËüµÄÏìÓ¦ËÙ¶ÈÓпÉÄÜ»áÏ൱µÄÂý¡£µ±Óû§ÔÚÎļþ¹ÜÀí³ÌÐòÖУ¬Ñ¡ÔñÁ˶ÔÎļþ½øÐÐijһ¸ö²Ù×÷ÒÔºó£¬Îļþϵͳ¿ÉÄÜ»áÐèÒªÏ൱³¤µÄʱ¼ä£¬²ÅÄÜÍê³ÉÕâÒ»²Ù×÷¡£Èç¹ûÎļþ¹ÜÀí³ÌÐò±ØÐëÒªµÈ´ýÎļþϵͳÍê³ÉÕâÒ»²Ù×÷£¬È»ºó²ÅÄܼÌÐøµÄ»°£¬ÕâÏÔÈ»»á¸øÎļþ¹ÜÀí³ÌÐòµÄÓû§´øÀ´·Ç³£²»Óä¿ìµÄ¾­Àú¡£½â¾öÕâÒ»¸öÎÊÌâµÄ°ì·¨£¬¾ÍÊÇҪʵÏÖÒì²½µÄÎļþϵͳ I/O¡£
¡¡¡¡
¡¡¡¡ÔÚ Linux µÄ Gnome ×ÀÃæ»·¾³ÖУ¬ÓÉ GnomeVFS °ü¹üÁËÕæÕýµÄ Linux Îļþϵͳ I/O£¬ÊµÏÖÁËÒ»¸öÒì²½µÄÎļþϵͳ I/O ½Ó¿Ú API¡£ÎÒÃÇ¿ÉÒÔ¿´µ½ÏÂÃæÕâ¸öÓà GnomeVFS ´ò¿ªÎļþµÄÀý×Ó¡£
¡¡¡¡
¡¡¡¡enum _GnomeVFSOpenMode {
¡¡¡¡ GNOME_VFS_OPEN_NONE = 0,
¡¡¡¡ GNOME_VFS_OPEN_READ = 1 << 0,
¡¡¡¡ GNOME_VFS_OPEN_WRITE = 1 << 1,
¡¡¡¡ GNOME_VFS_OPEN_RANDOM = 1 << 2
¡¡¡¡};
¡¡¡¡typedef enum _GnomeVFSOpenMode GnomeVFSOpenMode;
¡¡¡¡typedef void (* GnomeVFSAsyncOpenCallback)
¡¡¡¡ (GnomeVFSAsyncHandle *handle,
¡¡¡¡ GnomeVFSResult result,
¡¡¡¡ gpointer callback_data);
¡¡¡¡GnomeVFSResult gnome_vfs_async_open
¡¡¡¡ (GnomeVFSAsyncHandle **handle_return,
¡¡¡¡ const gchar *text_uri,
¡¡¡¡ GnomeVFSOpenMode open_mode,
¡¡¡¡ GnomeVFSAsyncOpenCallback callback,
¡¡¡¡ gpointer callback_data);
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡ÎÒÃÇ×¢Òâµ½£¬ÉÏÃæµÄ´úÂë¶ÎÖУ¬Óû§³ÌÐòΪÁË´ò¿ªÒ»¸öÎļþ£¬Ïò GnomeVFS ×¢²áÁËÒ»¸ö call back Àý³Ì¡£ÔÚ×¢²áÁËÕâÒ»¸ö call back Àý³ÌÖ®ºó£¬º¯Êýµ÷ÓþÍÁ¢¼´·µ»Ø¸øÓû§³ÌÐò£¬Óû§³ÌÐò¾Í¿ÉÒÔ´¦Àí×Ô¼ºµÄ±ðµÄÊÂÇéÈ¥ÁË£¬±ÈÈç½øÒ»²½ÏìÓ¦À´×ÔÓû§µÄÆä--ëÇó£?ȵȡ£¶?±Îļ?µÍ³Íê³É¶ÔÎļ?Ä´ò¿?Ù×÷ÒÔºó£�GnomeVFS ¾Í»áµ÷ÓøոÕ×¢²áµÄ call back Àý³Ì£¬Í¨ÖªÓû§³ÌÐò£¬ÎļþÒѾ­´ò¿ª¡£
¡¡¡¡
¡¡¡¡
¡¡¡¡
¡¡¡¡Ð¡½á
¡¡¡¡
¡¡¡¡
¡¡¡¡ÎÒÃÇÔÚ±¾ÎÄÖÐÁ˽âÁË Linux Kernel ÖÐµÄ dnotify£¬¿ÉÒÔ°ïÖúÎÒÃÇʵʱµØ¼àÊÓÎļþϵͳĿ¼Ê÷Öеı仯Çé¿ö£»Ò²Á˽âÁË Gnome ×ÀÃæ»·¾³µÄ GnomeVFS Òì²½Îļþϵͳ I/O À©Õ¹£»¿ÉÒÔ°ïÖúÓû§³ÌÐò²»ÖÁÓÚ±»ÎļþϵͳµÄÇëÇóËù Block¡£ÕâÁ½¸ö¹¦ÄܶÔÓÚ Linux ϵͳÔÚ×ÀÃæÉϵÄÓ¦Óö¼ÊǺÜÖØÒªµÄ¡£
¡¡¡¡
¡¡¡¡




#If you have any other info about this subject , Please add it free.#
êdzÆ:
ÓÊÏä:
µç»°:

ÄúµÄÁôÑÔ:


Èç¹ûÄúÓйØÓÚ LinuxÎļþϵͳµÄ×ÀÃæÓ¦Óà ·½ÃæµÄ²úÆ·»òÕß¿´·¨£¬¾´ÇëÔÚ´Ë·¢²¼.