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)的文件描述符; 
offset 偏移量;表示sendfile函数从in_fd中的哪一偏移量开始读取数据.如果是零表示从文件的开始读,否则从相应的偏移量读取.如果是循环读取的时候,下一次offset值应为sendfile函数返回值加上本次的offset的值. offset为传入传出参数,在用循环传大文件的时候会自增。
count是在两个描述符之间拷贝的字节数(bytes)

返回值: 
如果成功的拷贝,返回写操作到out_fd的字节数,错误返回-1,并相应的设置error信息.

EAGAIN 无阻塞I/O设置O_NONBLOCK时,写操作(write)阻塞了. 
EBADF 输出或者输入的文件描述符没有打开. 
EFAULT 错误的地址. 
EINVAL 描述符不可用或者锁定了,或者用mmap()函数操作的in_fd不可用. 
EIO 当读取(read)in_fd时发生未知错误. 
ENOMEM 读(read)in_fd时内存不足.

off = 0;
while((ret = sendfile(new_fd,fd,&off,4096))>0){if(ret == -1){perror("sendfile");}}

  

转载于:https://www.cnblogs.com/xintt/p/8724290.html

Linux 零拷贝 sendfile函数中文说明及实际操作相关推荐

  1. Linux 零拷贝方案

    一 什么是零拷贝(zero copy)? 零拷贝有什么优点? 1.1 什么是零拷贝? 零拷贝: 指的是在I/O过程中,用户空间和内核空间不需要进行CPU数据拷贝.零拷贝并不是指I/O过程中一次拷贝都没 ...

  2. Linux - 零拷贝技术

    Linux - 零拷贝技术 前言 一. 相关概念 1.1 缓冲区 1.1.1 内核缓冲区 1.1.2 用户缓冲区 1.2 DMA技术 1.3 虚拟内存 二. 零拷贝 2.1 传统文件传输流程 2.2 ...

  3. Linux 零拷贝技术

    文章目录 使用标准I/O的痛点 零拷贝技术介绍 直接I/O操作 mmap内存映射 sendfile 在文件描述符之间传递数据 使用标准I/O的痛点 在Linux中 标准I/O操作都是基于数据拷贝的缓冲 ...

  4. 搞懂Linux零拷贝,DMA

    目录 为什么要有 DMA 技术? 传统的文件传输有多糟糕? 如何优化文件传输的性能? 如何实现零拷贝? PageCache 有什么作用? 大文件传输用什么方式实现? 总结 磁盘可以说是计算机系统最慢的 ...

  5. 零拷贝——sendfile

    一.DMA io读写有两种方式: 中断 DMA 用户进程发起数据读取请求 系统调度为该进程分配cpu cpu向io控制器(ide,scsi)发送io请求 用户进程等待io完成,让出cpu 系统调度cp ...

  6. 讲透彻什么是Linux零拷贝?

    本文探讨 Linux 中主要的几种零拷贝技术以及零拷贝技术的适用场景.为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入.在写一个服务端程序时(Web Server或者文件服务器),文件下载是一 ...

  7. 可算是有文章,把Linux零拷贝讲透彻了!

    击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入组织 来源:22j.co/brVn 本文探讨 Linux 中主要的几种零拷贝 ...

  8. Linux零拷贝技术

    1.为什么需要零拷贝 传统的 Linux 系统的标准 I/O 接口(read.write)是基于数据拷贝的,也就是数据都是 copy_to_user 或者 copy_from_user. 好处:通过中 ...

  9. linux零拷贝实现程序,浅析零拷贝技术

    前言零拷贝(英语:Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域.这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽. 零拷贝操作减少了在用户 ...

最新文章

  1. java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**
  2. html标签的嵌套规则
  3. CentOS7 SSH相关
  4. 中国大学MOOC 人工智能导论第一章测试
  5. pdf怎么查看坐标 python_如何从PDF文件中提取文本和文本坐标?
  6. ActiveMQ跟SpringBoot整合的双向队列
  7. 模拟登录QQ判断是否需要验证码
  8. python读json文件太大github_GitHub上最火的开源项目是啥|JSON文件实战处理
  9. c语言牛顿方法,C语言编写牛顿迭代法的跟踪
  10. java栈与堆_JAVA中的栈和堆
  11. 2012-8-1复选框全选
  12. ucinet网络分析使用总结
  13. aspectjweaver和aspectjrt的区别
  14. Appium从环境搭建到测试脚本编写(四)
  15. CSS中的边框与内边距外边距
  16. Fabric v2.3 下载二进制文件和镜像bootstrap.sh脚本解析
  17. Stacked DeBERT
  18. Linux——磁盘Part 4:磁盘阵列(raid0、raid1、raid5、raid6、raid1+0)
  19. 以ansi ,gbk,gb2312格式进行base64 加密和 base64解密(防止中文乱码)
  20. 数据科学系列:plotly可视化入门介绍

热门文章

  1. sort list java leetcode_[LeetCode] 148. Sort List Java
  2. JAVA16版本.JDK16关于TCP和UDP的优化
  3. Spring期末试题
  4. 如何使用Dirsearch探测Web目录
  5. 2018 CVPR GAN 相关论文调研
  6. 逻辑回归:损失函数与梯度下降
  7. 深入互联网广告中的出价模式(上)— 基础出价模式
  8. [译]GC专家系列1:理解Java垃圾回收
  9. drools规则引擎因为内存泄露导致的内存溢出
  10. 改了改之前那个很糙的XXX