现在流行的 web 服务器里面都提供 sendfile 选项用来提高服务器性能,那到底 sendfile 是什么,怎么影响性能的呢?sendfile 实际上是 linux 2.0+ 以后的推出的一个系统调用,web 服务器可以通过调整自身的配置来决定是否利用 sendfile 这个系统调用。先来看一下不用 sendfile 的传统网络传输过程: read(file, tmp_buf, len); write(socket, tmp_buf, len); 硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >> 协...
by ljb-2000 - Linux文档专区 - 2009-09-16 09:54:02 阅读(646) 回复(0)
因为看了《高性能网络编程》 学了用epoll,感觉不错 这两天搜索sendfile,好像说linux 2.6打算废除sendfile用splice代替 但是直到2.6.17.6,sendfile仍旧没有废除 在/usr/src/kernels/linux-2.6.17.6/Documentation/也没找到要废除sendfile的说法 下面的程序在2.6.9-34.0.2.EL和2.6.17.6都有效 static int ftp_data_up(int sock_data, char *file_name) { FILE *fp = NULL; int fd; off_t offse...
因为看了《高性能网络编程》 学了用epoll,感觉不错 这两天搜索sendfile,好像说linux 2.6打算废除sendfile用splice代替 但是直到2.6.17.6,sendfile仍旧没有废除 在/usr/src/kernels/linux-2.6.17.6/Documentation/也没找到要废除sendfile的说法 下面的程序在2.6.9-34.0.2.EL和2.6.17.6都有效 static int ftp_data_up(int sock_data, char *file_name) { FILE *fp = NULL; int fd; off_t offse...
sendfile函数说明 #include ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count); sendfile()是作用于数据拷贝在两个文件描述符之间的操作函数.这个拷贝操作是内核中操作的,所以称为"零拷贝".sendfile函数比起read和write函数高效得多,因为read和write是要把数据拷贝到用户应用层操作. 参数说明: out_fd 是已经打开了,用于写操作(write)的文件描述符; in_fd 是已经打开了,用于读操作(read)的文件描...
之前看了《 新爆内核高危漏洞sock_sendpage的利用分析的讨论 》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自 我的空间 )。 有什么不足之处还望多多指教~ [color="#0000ff"]内核的BUG 这个BUG首先得从sendfile系统调用说起。 考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取 的数据send到socket中。这...
之前看了《新爆内核高危漏洞sock_sendpage的利用分析的讨论》这篇帖子,在九贱兄和诸位CUer的指引下,大致弄清了整个漏洞的始末。现与大家分享(引用自我的空间)。 有什么不足之处还望多多指教~ 内核的BUG 这个BUG首先得从sendfile系统调用说起。 考虑将一个本地文件通过socket发送出去的问题。我们通常的做法是:打开文件fd和一个socket,然后循环地从文件fd中read数据,并将读取的数据send到socket中。这样,每次读写我们都需...
在论坛上看到一个讲linux内核BUG的帖子,利用这个BUG,一个普通用户能够在运行某个程序之后,获得root权限。 示例的代码如下: http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz 在ubuntu 9.04,内核版本2.6.28.12的机器上测试通过。 (警告,此BUG已经是公开的秘密了。如果想用来干坏事,是很容易被发现的,并且将受到法律的制裁!) 也希望linux内核尽快修复该BUG。 那么,这究竟是怎样一个BUG呢?这段代...
熟悉linux内核2.4版本的也许知道:在2.4版的内核中内嵌了一个叫做khttpd的静态网页服务器。当时,可能是效率的因素致使她被添加了进来,至于为什么最新的2.6版内核去掉了这个服务器,我考虑可能是因为linux内核“只提供机制,而不提供策略”,当然安全因素也不能排除在外。 实际上,把网页服务器做进内核也是完全没有必要的,因为linux内核提供了sendfile这样一个系统调用: #include sys/sendfile.h> ssize_t sendfile(int...
熟悉linux内核2.4版本的也许知道:在2.4版的内核中内嵌了一个叫做khttpd的静态网页服务器。当时,可能是效率的因素致使她被添加了进来,至于为什么最新的2.6版内核去掉了这个服务器,我考虑可能是因为linux内核“只提供机制,而不提供策略”,当然安全因素也不能排除在外。 实际上,把网页服务器做进内核也是完全没有必要的,因为linux内核提供了sendfile这样一个系统调用: #include sys/sendfile.h> ...
大家先看看code吧~!
[quote]#include