LinuxÒì²½IO̽ÌÖ
¡¡¡¡LinuxµÄI/O»úÖƾÀúÁËһϼ¸¸ö½×¶ÎµÄÑݽø£º ¡¡¡¡1. ͬ²½×èÈûI/O: Óû§½ø³Ì½øÐÐI/O²Ù×÷,Ò»Ö±×èÈûµ½I/O²Ù×÷Íê³ÉΪֹ. ¡¡¡¡2. ͬ²½·Ç×èÈûI/O: Óû§³ÌÐò¿ÉÒÔͨ¹ýÉèÖÃÎļþÃèÊö·ûµÄÊôÐÔO_NONBLOCK,I/O²Ù×÷¿ÉÒÔÁ¢¼´·µ»Ø,µ«ÊDz¢²»±£Ö¤I/O²Ù×÷³É¹¦. ¡¡¡¡3. Ò첽ʼþ×èÈûI/O: Óû§½ø³Ì¿ÉÒÔ¶ÔI/Oʼþ½øÐÐ×èÈû,µ«ÊÇI/O²Ù×÷²¢²»×èÈû.ͨ¹ýselect/poll/epollµÈº¯Êýµ÷ÓÃÀ´´ïµ½´ËÄ¿µÄ. ¡¡¡¡4. Ò첽ʱ¼ä·Ç×èÈûI/O: Ò²½Ð×öÒì²½I/O(AIO),Óû§³ÌÐò¿ÉÒÔͨ¹ýÏòÄں˷¢³öI/OÇëÇóÃüÁî,²»ÓõȴøI/OʼþÕæÕý·¢Éú,¿ÉÒÔ¼ÌÐø×ö ¡¡¡¡ÁíÍâµÄÊÂÇé,µÈI/O²Ù×÷Íê³É,Äں˻áͨ¹ýº¯Êý»Øµ÷»òÕßÐźŻúÖÆ֪ͨÓû§½ø³Ì.ÕâÑùºÜ´ó³Ì¶ÈÌá¸ßÁËϵͳÍÌÍÂÁ¿. ¡¡¡¡ÏÂÃæ¾ÍAIO×öÏêϸ½éÉÜ£º ¡¡¡¡ÒªÊ¹ÓÃaioµÄ¹¦ÄÜ,ÐèÒªincludeÍ·Îļþaio.h,ÔÚ±àÒëÁ¬½ÓµÄʱºòÐèÒª¼ÓÈëPOSIXʵʱÀ©Õ¹¿ârt.ÏÂÃæ¾Íaio¿âµÄʹÓÃ×ö½éÉÜ. ¡¡¡¡1. AIOÕû¸ö¹ý³ÌËùʹÓõÄÊý¾Ý´æ·ÅÔÚÒ»¸ö½á¹¹ÌåÖÐ,struct aiocb,aio control block.¿´¿´Í·ÎļþÖеĶ¨Ò壺 ¡¡¡¡/* Asynchronous I/O control block. */ ¡¡¡¡struct aiocb ¡¡¡¡{ ¡¡¡¡int aio_fildes; /* File desriptor. */ ÐèÒªÔÚÄĸöÎļþÃèÊö·ûÉϽøÐÐI/O ¡¡¡¡int aio_lio_opcode; /* Operation to be performed. */ Õâ¸öÊÇÕë¶ÔÅúÁ¿I/OµÄÇé¿öÓÐЧ,¶Áд²Ù×÷ÀàÐÍ ¡¡¡¡int aio_reqprio; /* Request priority offset. */ ÇëÇóÓÅÏȼ¶£¨If _POSIX_PRIORITIZED_IO is defined, and this file supports it, then the ¡¡¡¡asynchronous operation is submitted at a priority equal to that of the ¡¡¡¡calling process minus aiocbp->aio_reqprio.£© ¡¡¡¡volatile void *aio_buf; /* Location of buffer. */ ¾ßÌåÄÚÈÝ,Êý¾Ý»º´æ ¡¡¡¡size_t aio_nbytes; /* Length of transfer. */ Êý¾Ý»º´æµÄ³¤¶È ¡¡¡¡struct sigevent aio_sigevent; /* Signal number and value. */ ÓÃÓÚÒì²½I/OÍê³ÉºóµÄ֪ͨ. ¡¡¡¡ÄÚ²¿ÊµÏÖʹÓõÄÊý¾Ý³ÉÔ±. ¡¡¡¡/* Internal members. */ ¡¡¡¡struct aiocb *__next_prio; ¡¡¡¡int __abs_prio; ¡¡¡¡int __policy; ¡¡¡¡int __error_code; ¡¡¡¡__ssize_t __return_value; ¡¡¡¡#ifndef __USE_FILE_OFFSET64
¡¡¡¡__off_t aio_offset; /* File offset. */ ¡¡¡¡char __pad[sizeof (__off64_t) - sizeof (__off_t)]; ¡¡¡¡#else ¡¡¡¡__off64_t aio_offset; /* File offset. */ Îļþ¶ÁдƫÒÆ ¡¡¡¡#endif ¡¡¡¡char __unused[32]; ¡¡¡¡}; ¡¡¡¡2. int aio_read(struct aiocb *aiocbp); ¡¡¡¡Òì²½¶Á²Ù×÷,ÏòÄں˷¢³ö¶ÁµÄÃüÁî,´«ÈëµÄ²ÎÊýÊÇÒ»¸öaiocbµÄ½á¹¹,±ÈÈç ¡¡¡¡struct aiocb myaiocb; ¡¡¡¡memset(&aiocb , 0x00 , sizeof(myaiocb)); ¡¡¡¡myaiocb.aio_fildes = fd; ¡¡¡¡myaiocb.aio_buf = new char[1024]; ¡¡¡¡myaiocb.aio_nbytes = 1024; ¡¡¡¡if (aio_read(&myaiocb) != 0) ¡¡¡¡{ ¡¡¡¡printf("aio_read error:%sn" , strerror(errno)); ¡¡¡¡return false; ¡¡¡¡} ¡¡¡¡3. int aio_write(struct aiocb *aiocbp); ¡¡¡¡Òì²****Ù×÷,ÏòÄں˷¢³öдµÄÃüÁî,´«ÈëµÄ²ÎÊýÈÔÈ»ÊÇÒ»¸öaiocbµÄ½á¹¹,µ±ÎļþÃèÊö·ûµÄO_APPEND ¡¡¡¡±ê־λÉèÖúó,Òì²****Ù×÷×ÜÊǽ«Êý¾ÝÌí¼Óµ½Îļþĩβ.Èç¹ûûÓÐÉèÖÃ,ÔòÌí¼Óµ½aio_offsetÖ¸¶¨µÄ ¡¡¡¡µØ·½,±ÈÈ磺 ¡¡¡¡struct aiocb myaiocb; ¡¡¡¡memset(&aiocb , 0x00 , sizeof(myaiocb)); ¡¡¡¡myaiocb.aio_fildes = fd; ¡¡¡¡myaiocb.aio_buf = new char[1024]; ¡¡¡¡myaiocb.aio_nbytes = 1024; ¡¡¡¡myaiocb.aio_offset = 0; ¡¡¡¡if (aio_write(&myaiocb) != 0) ¡¡¡¡{ ¡¡¡¡pr |
|
ÁèÖڿƼ¼×¨ÒµÌṩ·þÎñÆ÷×âÓᢷþÎñÆ÷Íйܡ¢ÆóÒµÓʾ֡¢ÐéÄâÖ÷»úµÈ·þÎñ£¬¹«Ë¾ÍøÕ¾£ºhttp://www.lingzhong.cn ΪÁ˸ø¹ã´ó¿Í»§Á˽â¸ü¶àµÄ¼¼ÊõÐÅÏ¢£¬±¾¼¼ÊõÎÄÕÂÊÕ¼¯À´Ô´ÓÚÍøÂç,ÁèÖڿƼ¼×ðÖØÎÄÕÂ×÷ÕߵİæȨ£¬Èç¹ûÓÐÉæ¼°ÄãµÄ°æȨÓбØҪɾ³ýÄãµÄÎÄÕ£¬ÇëºÍÎÒÃÇÁªÏµ¡£ÒÔÉÏÐÅÏ¢ÓëÎÄÕÂÕýÎÄÊDz»¿É·Ö¸îµÄÒ»²¿·Ö,Èç¹ûÄúҪתÔر¾ÎÄÕÂ,Çë±£ÁôÒÔÉÏÐÅÏ¢£¬Ð»Ð»! |
- java¼S?×hÇÔòwindowsºÉÌñÀÇÓÉ×hxCopy - ˆ@š£Ã؉¯Àû
- 15 ·Ç³£ÓÐȤµÄ CSS3 ʾÀý
- PhotoshopºÏ³É½Ì³Ì:ÖÆ×÷±¼³ÛÆû³µÍøÂç¹ã¸æ
- linux ÈíRAIDͼ½â½Ì³Ì
- ÔÚApache GeronimoÖв¿ÊðWeb·þÎñ - ±à³ÌÈëÃÅÍø
- ÍøÂç·Óɼ¼Êõ¼°ÔËÓÃ
- PSÇáËÉÖÆ×÷÷ÈÁ¦ÎÞÏÞµÄË®µ×³¡¾°
- Photoshopµ÷É«½Ì³Ì£º¾ªÑÞÃÀÅ®
- PSÕÕƬµ÷É«½Ì³Ì:Ä£·ÂEEÉ«µ÷·ç¾°ÕÕƬ
- Linux×ÀÃæ°æºáÆÀ£ºËÄ¡¢SuSE Linux Enterprise Desktop 10 SP1