Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

ÆÊÎöÒ»¸öÓÉsendfileÒý·¢µÄlinuxÄÚºËBUG

֮ǰ¿´ÁË¡¶Ð±¬Äں˸ßΣ©¶´sock_sendpageµÄÀûÓ÷ÖÎöµÄÌÖÂÛ
¡·ÕâÆªÌû×Ó£¬ÔھżúÐÖºÍÖîλCUerµÄÖ¸ÒýÏ£¬´óÖÂŪÇåÁËÕû¸ö©¶´µÄʼĩ¡£ÏÖÓë´ó¼Ò·ÖÏí£¨ÒýÓÃ×ÔÎҵĿռä
£©¡£
ÓÐʲô²»×ãÖ®´¦»¹Íû¶à¶àÖ¸½Ì~
Äں˵ÄBUG
Õâ¸öBUGÊ×ÏȵôÓsendfileϵͳµ÷ÓÃ˵Æð¡£
¿¼Âǽ«Ò»¸ö±¾µØÎļþͨ¹ýsocket·¢ËͳöÈ¥µÄÎÊÌâ¡£ÎÒÃÇͨ³£µÄ×ö·¨ÊÇ£º´ò¿ªÎļþfdºÍÒ»¸ösocket£¬È»ºóÑ­»·µØ´ÓÎļþfdÖÐreadÊý¾Ý£¬²¢½«¶ÁÈ¡
µÄÊý¾Ýsendµ½socketÖС£ÕâÑù£¬Ã¿´Î¶ÁдÎÒÃǶ¼ÐèÒªÁ½´Îϵͳµ÷Ó㬲¢ÇÒÊý¾Ý»á±»´ÓÄں˿½±´µ½Óû§¿Õ¼ä(read)£¬ÔÙ´ÓÓû§¿Õ¼ä¿½±´µ½ÄÚºË
(send)¡£
¶øsendfile¾Í½«Õû¸ö·¢Ë͹ý³Ì·â×°ÔÚÒ»¸öϵͳµ÷ÓÃÖУ¬±ÜÃâÁ˶à´Îϵͳµ÷Ó㬱ÜÃâÁËÊý¾ÝÔÚÄں˿ռäºÍÓû§¿Õ¼äÖ®¼äµÄ´óÁ¿¿½±´¡£
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
ËäÈ»Õâ¸öϵͳµ÷ÓýÓÊÕinºÍoutÁ½¸öfd£¬µ«ÊÇÓÐËùÏÞÖÆ£¬inÖ»ÄÜÊÇÆÕͨÎļþ£¬outÖ»ÄÜÊÇsocket£¨Õâ¸öÏÞÖÆ²»ÖªµÀºóÀ´µÄÄں˰汾ÓÐûÓÐ·Å¿í£©¡£
sendfileϵͳµ÷ÓÃÔÚÄÚºËÀïÃæÊÇÔõôʵÏÖµÄÄØ£¿Õâ¸ö»¹ÊDZȽϸ´ÔÓ£¬ËüÔÚÄÚºËÀïÃæ×öÁËÔ­À´ÒªÔÚÓû§Ì¬×öµÄÊÂÇ飺´´½¨Ò»¸öpipe¶ÔÏó×÷bufferÓᢴÓin_fdÖжÁÊý¾Ýµ½pipeÖС¢½«pipeÖеÄÊý¾Ýдµ½out_fd¡¢Ñ­»·Ö±µ½Âú×ã½áÊøÌõ¼þ¡£
¹ØÓÚдÊý¾Ýµ½out_fdµÄ¹ý³Ì£¬¼òÒªÃèÊöÈçÏ£º
sys_sendfile
=> Èë¿Ú
do_sendfile
=> ²ÎÊý¼ì²é£¬ÆäÖлáÈ·¶¨out_fd¶ÔÓ¦µÄfile½á¹¹°üº¬sendfile·½·¨(out_file->f_op->sendpage)
do_splice_direct
=> ×îÖÕµ÷Óõ½out_file->f_op->splice_write£¬¶øout_fileÊǸösocket£¬ËüµÄf_op->splice_writeµÈÓÚgeneric_splice_sendpage
generic_splice_sendpage
=> ×îÖÕµ÷Óõ½out_file->f_op->sendpage£¬Õâ¸ösendpageµÈÓÚsock_sendpage
sock_sendpageµÄ´úÂëÈçÏ£º
struct socket *sock;
int flags;
sock = file->private_data;
flags = !(file->f_flags & O_NONBLOCK) ? 0 : MSG_DONTWAIT;
if (more)
   
flags |= MSG_MORE;
return sock->ops->sendpage(sock, page, offset, size, flags);
×¢Ò⣬BUG³öÏÖÁË£¬µ÷ÓÃsock->ops->sendpage֮ǰûÓÐÅжÏÕâ¸öº¯ÊýÖ¸ÕëÊÇ·ñΪNULL¡£
(ÕâÀïµ÷ÓõÄsock->ops->sendpage¾ÍÊÇ
out_file->f_op->private_data->ops->sendpage£¬out_file->f_op->private_data
Ö¸ÕëÖ¸ÏòµÄÊÇÒ»¸östruct socket½á¹¹£¬ÒòΪÕâ¸öfd´ú±íµÄÊÇÒ»¸ösock


Ïà¹ØÎĵµ£º

ʵսLinux Bluetooth±à³Ì£¨ËÄ£© L2CAP²ã±à³Ì

£¨L2CAPЭÒé¼ò½é£¬L2CAPÔÚBlueZÖеÄʵÏÖÒÔ¼°L2CAP±à³Ì½Ó¿Ú£©
Ò»£ºL2CAPЭÒé¼ò½é£º
Logical Link Control and Adaptation Protocol(L2CAP)
Âß¼­Á¬½Ó¿ØÖƺÍÊÊÅäЭÒé (L2CAP) ΪÉϲãЭÒéÌá¹©ÃæÏòÁ¬½ÓºÍÎÞÁ¬½ÓµÄÊý¾Ý·þÎñ£¬²¢Ìṩ¶àЭÒ鹦ÄܺͷָîÖØ×é²Ù×÷¡£L2CAP ³äÐíÉϲãЭÒéºÍÓ¦ÓÃÈí¼þ´«ÊäºÍ½ÓÊÕ×î´ó³¤¶ÈΪ 64K µÄ L2CAP Ê ......

¹Ø»úºÍÖØÆôÔÚLinux KernelÖеÄÄÄЩº¯ÊýÀïʵÏÖ?

¹Ø»úºÍÖØÆôÔÚLinux KernelÖеÄÄÄЩº¯ÊýÀïʵÏÖ¡£
rebootµÄ×îÖÕʵÏÖÔÚarch_reset()º¯Êý£¬Ëüͨ³£¶¨ÒåÔÚarch/arm/mach-xxx/include/mach/system.hÀï¡£system.h±»ARM kernelµÄpublic codeÓ¦Óã¬Òò´ËÄãÐèÒª¶¨ÒåÕâ¸öÍ·Îļþ£¬²¢ÊµÏÖËü¡£
arch_resetµÄº¯ÊýÔ­ÐÍΪ
void arch_reset(char mode) 
void arch_reset(char mode)& ......

[轉]С學ÈýÄê級µÄ Linux Íæ¼Ò

Á¬½á£ºÐ¡Ñ§ÈýÄê¼¶µÄ Linux Íæ¼Ò

ºé³¯¹ó2010/01/12 05:00:00
СѧÈýÄê¼¶µÄС P£¬×Ô¼ºÖÆ×÷³öË«¿ª»úµÄ linux ËæÉíµú¡£
С P µ½ÂèÂ蹫˾£¬Óà gparted °Ñ¹«Ë¾µÄµçÄÔµ÷ÕûһϷָ²¢×°ÉÏ Linux¡£ ÂèÂèµÄͬÊ¿´µ½Ä°ÉúµÄ grub Ñ¡µ¥£¬ºÜº¦ÅÂÒ²ºÜ²»¸ßÐË£¬ÒÔΪµçÄÔ±»Í滵ÁË¡£
ÔÚ¼ÒÀС P ½å×Å Windows XP Éý¼¶³É Wi ......

LINUXÏÂOracle¿â±¸·Ý½Å±¾

vi /opt/back.sh(oracleÓû§)
#!/bin/ksh
tim=`date +%Y%m%d`
unset USERNAME
#export DISPLAY=0.0.0.0:0.0
#export ORACLE_BASE=/home/oraprod3
#export ORACLE_HOME=/prod/oracle/prod3db/9.2.0
#export ORACLE_SID=PROD3_db
#export LD_LIBRARY_PATH=/prod/oracle/prod3db/9.2.0/lib
#export ORACLE_TERM=vt100 ......

LINUXºÍAIXÏÂѹËõÃüÁî

LinuxϵÄѹËõÃüÁî
ѹËõĿ¼file
tar -czf file0117.tar.z file
½âѹ.tarÎļþ
tar -xzf ÎļþÃû.tar
´ò°üĿ¼
tar -cvf file0117.tar file
½â°ü
tar -xvf ÎļþÃû.tar
AIXϵÄѹËõÃüÁî
1. backup: ¼Ó-i²ÎÊý¿É¶ÔÎļþ»òĿ¼½øÐб¸·Ý£¬¼Ó-p²ÎÊý¿É¶ÔÒª±¸·ÝµÄÎļþ½øÐÐѹËõ£¬µ«ÊǽöÄÜѹËõСÓÚ2GµÄÎļþ¡£
2. compress: ¶ ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ