ʵ¼ÊÉÏ£¬°ÑÍøÒ³·þÎñÆ÷×ö½øÄÚºËÒ²ÊÇÍêȫûÓбØÒªµÄ£¬ÒòΪLinuxÄÚºËÌṩÁËsendfileÕâÑùÒ»¸öϵͳµ÷Óãº
ÒýÓÃ:#include
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
ËýÄܰÑÒ»¸öÎļþ´ÓÌØ¶¨²¿·Ö¿ªÊ¼µÄÌØ¶¨¿éͨ¹ýÒ»¸ösocket·¢ËͳöÈ¥£¬´Ó¶ø±ÜÃâÁ˶à´Îµ÷ÓÃreadºÍwriteµÄÄÚºËÉÏÏÂÎĺÍÓû§ÉÏÏÂÎÄÇл»µÄ¿ªÏú£¬²¢ÇÒÓÉÓÚÆäÄÚ²¿ÊµÏÖÀûÓÃÁËmmap¼¼Êõ£¬Ò²¼õÉÙÁËÄÚ´æµÄ¸´ÖÆ¿ªÏú¡£ÓÐÁËËý£¬ÇëÎÊkhttpd»¹ÓÐÄÇô±ØÒªÃ´£¿
spliceºÍteeÊÇ2.6.17°æµÄLinuxÄÚºËÊ×´ÎÒýÈëµÄ:
ÒýÓÃ:#define _GNU_SOURCE
#include
long splice(int fd_in, off_t *off_in, int fd_out,
off_t *off_out, size_t len, unsigned int flags);
ÒýÓÃ:#define _GNU_SOURCE
#include
long tee(int fd_in, int fd_out, size_t len, unsigned int flags);
ÕâÁ½¸öÖ÷ÒªÓÃÀ´¼õÉٹܵÀºÍÆäËûÃèÊö·ûÖ®¼ä´«µÝÊý¾ÝʱµÄreadºÍwriteϵͳµ÷ÓõÄÊýÄ¿£¬ÏêϸÓ÷¨Çë²é¿´manÒ³£¬ÆäÖÐteeµÄmanÒ³Öл¹¸ø³öÁ˲ÉÓÃspliceºÍteeÖØÐÂʵÏÖµÄÒ»¸öteeÃüÁî×÷ΪʾÀý£¬ÈçÓÐÐËȤ£¬¿É²é¿´Ò»Ï¡£
ÓëËûÃÇһͬÒýÈëµÄ»¹ÓÐvmsplice:
ÒýÓÃ:#define _GNU_SOURCE
#include
#include
long vmsplice(int fd, const struct iovec *iov,
unsigned long nr_segs, unsigned int flags);
Õâ¸öϵͳµ÷Óý«Óû§¿Õ¼äµÄÄÚ´æÓ³Éäµ½Äں˿ռ䣬´Ó¶ø±ÜÃâÁËʵ¼ÊµÄÄÚ´æÐ´²Ù×÷£¬Ìá¸ßÁËϵͳЧÂÊ¡£
²»¹ý£¬ÎÒ²¢Ã»ÓоõµÃsplice£¬teeºÍvmspliceÔÚʵ¼ÊµÄ´úÂëÖкܡ°ÓÐÓá±£¬µ¹ÊǾõµÃÈç¹ûÄÜÈ¥³ý¶Ô¹ÜµÀµÄÏÞÖÆ¸üºÃЩ¡£ÒòΪËíµÀÐ͵ĴúÀí·þÎñ³ÌÐò£¬ÔÚÁ¬½Ó½¨Á¢ºó£¬Ê£ÏµÄÖ÷ÒªÈÎÎñ¾ÍÊÇÔÚÁ½¸ösocketÖ®¼ä»¥ÏàrelayÊý¾Ý£¬Èç¹ûÄܰÑËûÃÇspliceÆðÀ´£¬»¹ÊÇÄÜÔÚÒ»¶¨³Ì¶ÈÉÏÌá¸ßЧÂʵġ£ºÇºÇ£¬ÖÚ¿ÚÄѵ÷£¡
Ï£ÍûÒÔÉϽéÉܶԴó¼ÒÓÐÒæ£¡
coolbg ÓÚ 2006-11-14 16:00:15·¢±í:
ѧϰÁË£¬¶¥Ò»¸ö