¿ìËÙÒµÎñͨµÀ

LinuxÏÂC±à³Ì£¨3£©

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

´´½¨Ò»¸öÄÜÓõÄSOCKETÊǷdz£¼òµ¥µÄ,GLIBCÒѾ­ÎªÄã×öÁ˺ܶà¼ò»¯¹¤×÷,µ«ÊÇ´ÓÁíÒ»¸ö½Ç¶ÈÀ´Ëµ,Ò»¸öͨÓõÄSOCKET²»´ú±íÒ»¸ö¸ßЧÐÔÄܵÄÍøÂçÓ¦ÓÃ.ÎÒÃÇÇ°Ãæ˵µ½sockfdÆäʵͬÕæÕýµÄFDÊÇÒ»ÑùµÄ.¶¼ÊÇLINUXϵÄÒ»¸ö´ò¿ªµÄÉ豸ÃèÊö·û.ÄÚºËͨ¹ýÕâ¸öÃèÊö·û½øÐÐI/O²Ù×÷.½øÐÐI/O²Ù×÷¾ÍÓÐÒ»¸öÐÔÄÜÎÊÌâ,Õâ¸öÐÔÄÜÎÊÌâÔÚÓÚÁ½¸öÌõ¼þ,Ò»¸öÌõ¼þÊǶÔͬһ¸öFD,Óжà¸ö¿Í»§½øÐвÙ×÷ʱÈçºÎ¸üºÃµÄÅŶÓ.ÁíÒ»¸ö¾ÍÊÇÒ»¸ö¿Í»§Èç¹ûÓжà¸öFD,ÄÇÓ¦¸ÃÔõôÅŶÓÑ¡ÔñÎÊÌâ.ÎÒÃÇÖªµÀ²»¹ÜÊÇREAD»¹ÊÇREADFREOMËüÆäʵ¶¼ÊÇ×èÈû²Ù×÷.Ò»µ©Õ¼ÓþÍʼÖյȵ½ÓÐÐÂÊý¾ÝÀ´µ½.ÄÇôÈçºÎ½â¾öÕâ¸öÎÊÌâÄØ£¿ÎÒÃÇ¿´µÚÒ»¸öÅŶÓÎÊÌâ,¾ÍÊǶà¸ö¿Í»§Ê¹ÓÃͬһ¸öSOCKET,Èç¹ûµ±Ç°À´µÄÊý¾Ý²»ÊÇÕ¼¾ÝµÄ¿Í»§,ÄÇÏÔÈ»»áµ¼ÖÂ×èÈû.ÎÒÃÇÏë³öÁíÒ»¸ö·½·¨,¾ÍÊǵ±Ò»¸ö»ò¶à¸öI/OÌõ¼þÂú×ã,ÈçÊäÈëÊý¾ÝÒÑ×¼±¸ºÃ±»¶Á»òÕßÃèÊö×Ö¿ÉÒԳнӸü¶àÊä³öʱµÄʱºò,×÷ΪÏû·ÑÕߵĿͻ§¶Ë¿ÉÒÔ±»Í¨Öªµ½,ÕâÑùµÄÄÜÁ¦³Æ֮ΪI/O¸´ÓÃ.Õâ¸öÔÚGLIBCÖÐÉè¼ÆÁËÁ½¸öеĺ¯Êý¾ÍÊÇSELECT/POLL.ÒÔÏÂÊǼ¸ÖÖI/OÄ£Ð͵ıȽÏͼ£º

1£©×èÈûI/OÄ£ÐÍ,ȱʡµÄÌ×½Ó¿Ú¶¼ÊÇ×èÈûµÄ,ÄãʹÓÃREADʱһ¶¨ÒªÓÐÊý¾Ýʱ½ø³Ì²Å»á½øÐÐÏÂÈ¥.ÈçÏÂͼ£º

2£©·Ç×èÈûI/O,ÔÚ½«Ì×½Ó¿ÚÉèÖÃΪ·Ç×èÈû·½Ê½ÏÂ,Äں˾ÍÈÃÇëÇóµ**/O²Ù×÷ÔÚûÓÐÊý¾ÝµÄÇé¿öÖ±½Ó·µ»ØÒ»¸ö´íÎó,²»ÔÙµÈÌØ.ÏÔÈ»ÕâÖÖ²Ù×÷ÐèÒª²»Í£µÄ³¢ÊÔ,ÏûºÄ·Ç³£¶àµÄCPU.

·Ç×èÈûI/O¿ÉÒÔʹÓÃfcntl²ÎÊý½øÐÐÉèÖÃREAD/RECVFROM,µ«ºÜÃ÷ÏÔËüµÄ³¢ÊÔ´ÎÊý·Ç³£¶à.

[windriver@windriver-machine ltest]$ gcc noread.c -o noread
[windriver@windriver-machine ltest]$ strace -e read -o out.txt ./noread
aaa
aaa
bbbbb
bbbbb
ccccc
ccccc

[windriver@windriver-machine ltest]$ cat out.txt
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\20"..., 512) = 512
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, "aaa\n", 4096) = 4
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, "bbbbb\n", 4096) = 6
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, "ccccc\n", 4096) = 6
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, "\n", 4096) = 1
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
read(0, 0x80498c0, 409

ÁèÖڿƼ¼×¨ÒµÌṩ·þÎñÆ÷×âÓᢷþÎñÆ÷Íйܡ¢ÆóÒµÓʾ֡¢ÐéÄâÖ÷»úµÈ·þÎñ£¬¹«Ë¾ÍøÕ¾£º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ºÅ