¿ìËÙÒµÎñͨµÀ

LinuxÒì²½IO̽ÌÖ

×÷Õß ØýÃû¼¼Êõ À´Ô´ Linuxϵͳ ä¯ÀÀ ·¢²¼Ê±¼ä 2012-04-15

¡¡¡¡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

Empire CMS,phome.net

¡¡¡¡__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»¿É·Ö¸îµÄÒ»²¿·Ö,Èç¹ûÄúҪתÔر¾ÎÄÕÂ,Çë±£ÁôÒÔÉÏÐÅÏ¢£¬Ð»Ð»!

·ÖÏíµ½£º ¸ü¶à

Copyright ©1999-2011 ÏÃÃÅÁèÖڿƼ¼ÓÐÏÞ¹«Ë¾ ÏÃÃÅÓÅͨ»¥Áª¿Æ¼¼¿ª·¢ÓÐÏÞ¹«Ë¾ All rights reserved

µØÖ·(ADD)£ºÏÃÃÅÈí¼þÔ°¶þÆÚÍûº£Â·63ºÅ701E£¨¶«ÄÏÈÚͨÅÔ£© Óʱà(ZIP)£º361008

µç»°£º0592-5908028 ´«Õ棺0592-5908039 ×ÉѯÐÅÏ䣺web@lingzhong.cn ×ÉѯOICQ£º173723134

¡¶ÖлªÈËÃñ¹²ºÍ¹úÔöÖµµçÐÅÒµÎñ¾­ÓªÐí¿ÉÖ¤¡·ÃöB2-20100024  ICP±¸°¸:ÃöICP±¸05037997ºÅ