linux sendfile 实例,sendfile - linux

传统文件传输(读/写)中,需经过多个上下文切换,最终将文件写入socket:read(file,tmp_buf,len);

write(socket,tmp_buf,len);

传统文件读写过程

1、调用read函数,将文件数据复制到内核缓冲区。

2、read函数从内核缓冲区取回文件数据,复制到用户缓冲区。

3、写函数将文件数据从用户缓冲区,复制到socket相关缓冲区。

4、数据从socket缓冲区复制到协议引擎。

传统网络传输文件过程,经历四次复制操作:

磁盘>内核缓冲区 - >用户缓冲区>socket协议引擎相关缓冲区>

sendfile操作文件过程sendfile(socket, file, len);

1、调用sendfile,文件数据被复制到内核(kernel)缓冲区。

2、从内核缓冲区复制到socket缓冲区。

3、从socket缓冲区复制到协议引擎。

与传统方式相比,sendfile减少文件的复制过程内核2.4中sendfile更简单。

2.1与2.4的区别

2.4中文件数据被复制到内核缓冲区时,不再将数据复制到与socket缓冲区,只记录socket缓存位置和长度,数据直接发送到DMA协议引擎,减少复制操作,支持的数据不能超过2G。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值