Linux 零拷贝 sendfile函数中文说明及实际操作
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函数中文说明及实际操作相关推荐
- Linux 零拷贝方案
一 什么是零拷贝(zero copy)? 零拷贝有什么优点? 1.1 什么是零拷贝? 零拷贝: 指的是在I/O过程中,用户空间和内核空间不需要进行CPU数据拷贝.零拷贝并不是指I/O过程中一次拷贝都没 ...
- Linux - 零拷贝技术
Linux - 零拷贝技术 前言 一. 相关概念 1.1 缓冲区 1.1.1 内核缓冲区 1.1.2 用户缓冲区 1.2 DMA技术 1.3 虚拟内存 二. 零拷贝 2.1 传统文件传输流程 2.2 ...
- Linux 零拷贝技术
文章目录 使用标准I/O的痛点 零拷贝技术介绍 直接I/O操作 mmap内存映射 sendfile 在文件描述符之间传递数据 使用标准I/O的痛点 在Linux中 标准I/O操作都是基于数据拷贝的缓冲 ...
- 搞懂Linux零拷贝,DMA
目录 为什么要有 DMA 技术? 传统的文件传输有多糟糕? 如何优化文件传输的性能? 如何实现零拷贝? PageCache 有什么作用? 大文件传输用什么方式实现? 总结 磁盘可以说是计算机系统最慢的 ...
- 零拷贝——sendfile
一.DMA io读写有两种方式: 中断 DMA 用户进程发起数据读取请求 系统调度为该进程分配cpu cpu向io控制器(ide,scsi)发送io请求 用户进程等待io完成,让出cpu 系统调度cp ...
- 讲透彻什么是Linux零拷贝?
本文探讨 Linux 中主要的几种零拷贝技术以及零拷贝技术的适用场景.为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入.在写一个服务端程序时(Web Server或者文件服务器),文件下载是一 ...
- 可算是有文章,把Linux零拷贝讲透彻了!
击上方"朱小厮的博客",选择"设为星标" 后台回复"加群",加入组织 来源:22j.co/brVn 本文探讨 Linux 中主要的几种零拷贝 ...
- Linux零拷贝技术
1.为什么需要零拷贝 传统的 Linux 系统的标准 I/O 接口(read.write)是基于数据拷贝的,也就是数据都是 copy_to_user 或者 copy_from_user. 好处:通过中 ...
- linux零拷贝实现程序,浅析零拷贝技术
前言零拷贝(英语:Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域.这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽. 零拷贝操作减少了在用户 ...
最新文章
- java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**
- html标签的嵌套规则
- CentOS7 SSH相关
- 中国大学MOOC 人工智能导论第一章测试
- pdf怎么查看坐标 python_如何从PDF文件中提取文本和文本坐标?
- ActiveMQ跟SpringBoot整合的双向队列
- 模拟登录QQ判断是否需要验证码
- python读json文件太大github_GitHub上最火的开源项目是啥|JSON文件实战处理
- c语言牛顿方法,C语言编写牛顿迭代法的跟踪
- java栈与堆_JAVA中的栈和堆
- 2012-8-1复选框全选
- ucinet网络分析使用总结
- aspectjweaver和aspectjrt的区别
- Appium从环境搭建到测试脚本编写(四)
- CSS中的边框与内边距外边距
- Fabric v2.3 下载二进制文件和镜像bootstrap.sh脚本解析
- Stacked DeBERT
- Linux——磁盘Part 4:磁盘阵列(raid0、raid1、raid5、raid6、raid1+0)
- 以ansi ,gbk,gb2312格式进行base64 加密和 base64解密(防止中文乱码)
- 数据科学系列:plotly可视化入门介绍