首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

sendfile函数「建议收藏」

sendfile函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,这被称为零拷贝。...sendfile函数的定义如下: #include ssize_t sendfile(int out_fd, int in_fd, off_t* offset, size_t...offset参数指定从读入文件流的哪个位置开始读,如果为空,则从in_fd文件描述符所指的文件的文件偏移位置开始读,并且sendfile会更新in_fd所指文件的文件偏移。...sendfile成功时返回传输的字节数,失败则返回-1并设置errno。...该函数的man手册明确指出in_fd必须是一个支持类似mmap函数的文件描述符,即它必须指向真实的文件,不能是socket和管道;在Linux2.6.33之前,out_fd必须是一个socket,而从Linux2.6.33

47410
您找到你想要的搜索结果了吗?
是的
没有找到

高级IO函数sendfile函数

sendfile函数在两个文件描述符之间传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,被称为零拷贝。...函数定义为: #include ssize_t senfile(int out_fd,int in_fd,off_t* offset,size_t count); in_fd...当需要对一个文件进行传输的时候,具体流程细节如下: 1:调用read函数,文件数据copy到内核缓冲区 2:read函数返回,文件数据从内核缓冲区copy到用户缓冲区 3:write函数调用,将文件数据从用户缓冲区...而sendfile的工作原理呢??...1、系统调用 sendfile() 通过 DMA 把硬盘数据拷贝到 kernel buffer,然后数据被 kernel 直接拷贝到另外一个与 socket 相关的 kernel buffer。

45710

Nginx sendfile原理详解

配置语法 语法: sendfile on | off; 默认值: sendfile off; 上下文: http,server,location,if in location 说明 sendfile值为...on,指定使用sendfile系统调用来传输文件。...sendfile on; # ... } 原理 read/write 在传统的文件传输方式(read、write/send方式),具体流程细节如下: 调用read函数,文件数据拷贝到内核缓冲区...read函数返回,数据从内核缓冲区拷贝到用户缓冲区 调用write/send函数,将数据从用户缓冲区拷贝到内核socket缓冲区 数据从内核socket缓冲区拷贝到协议引擎中 在这个过程当中,文件数据实际上是经过了四次拷贝操作...: 硬盘—>内核缓冲区—>用户缓冲区—>内核socket缓冲区—>协议引擎 sendfile sendfile系统调用则提供了一种减少拷贝次数,提升文件传输性能的方法。

64220

Linux Sendfile 的原理与优点

sendfile 函数在两个文件描写叙述符之间直接传递数据(全然在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率非常高,被称之为零拷贝。...sendfile 函数的定义例如以下: #include ssize_t sendfile(int out_fd,int in_fd,off_t*offset,size_t...当须要对一个文件进行传输的时候,其详细流程细节例如以下: 调用 read 函数,文件数据被 copy 到内核缓冲区。 read 函数返回。文件数据从内核缓冲区 copy 到用户缓冲区。...write 函数调用。将文件数据从用户缓冲区 copy 到内核与 socket 相关的缓冲区。 数据从 socket 缓冲区 copy 到相关协议引擎。...sendfile 系统调用是在 2.1 版本号内核时引进的: sendfile(socket, file, len); 执行流程例如以下: sendfile 系统调用,文件数据被 copy 至内核缓冲区

73620

使用X-Sendfile下载文件

X-Sendfile 通过 HTTP header 来实现:在 X-Sendfile 头中指定一个文件的地址来通告前web server。 不过,在默认情况下它是被大多数 web 服务器禁用的。...而不同的 web 服务器的实现也不一样,包括规定了不同的 X-Sendfile 头格式。如果配置不合理将无法完成文件下载。...不同的 web 服务器实现了不同的 HTTP 头 ,sendfile 头和使用的 web 服务器如下: X-Sendfile Apache, Lighttpd v1.5, Cherokee X-LIGHTTPD-send-file...Lighttpd v1.4 X-Accel-Redirect Nginx, Cherokee 使用 X-SendFile 的缺点是你失去了对文件传输机制的控制。...例如如果你希望在完成文件下载后执行某些操作,比如只允许用户下载文件一次,这个 X-Sendfile 是没法做到的,因为后台的 php 脚本并不知道下载是否成功。

62230

【Netty】mmap 和 sendFile 零拷贝原理

文章目录 一、 零拷贝 简介 二、 传统 BIO 数据拷贝分析 ( 4拷贝 4切换 ) 三、 mmap 内存映射 ( 3拷贝 4切换 ) 四、 sendFile 函数 ( Linux 2.1 优化 )...( 3拷贝2切换 ) 五、 sendFile 函数 ( Linux 2.4 优化 ) ( 2拷贝 2切换 ) 一、 零拷贝 简介 ---- 零拷贝作用 : 在网络编程中 , 如果要进行性能优化 , 肯定要涉及到零拷贝...函数 ( Linux 2.1 优化 ) ( 3拷贝2切换 ) ---- sendFile 是 Linux 提供的函数 , 其实现了由 内核缓冲区 直接将数据拷贝到 Socket 缓冲区 , 该操作直接在内核空间完成..., 之后拷贝到协议栈时 , 变成用户状态 ; 用户态 -> 内核态 -> 用户态 五、 sendFile 函数 ( Linux 2.4 优化 ) ( 2拷贝 2切换 ) ---- sendFile 是..., 2 次状态切换 ; 1 . sendFile 函数 数据拷贝分析 : 全称 DMA 拷贝 , 没有 CPU 拷贝 ; ① 硬盘文件 -> 内核缓冲区 : 硬盘文件数据 , DMA 拷贝到 内核缓冲区

64110

【Netty】mmap 和 sendFile 零拷贝原理

文章目录 一、 零拷贝 简介 二、 传统 BIO 数据拷贝分析 ( 4拷贝 4切换 ) 三、 mmap 内存映射 ( 3拷贝 4切换 ) 四、 sendFile 函数 ( Linux 2.1 优化 )...( 3拷贝2切换 ) 五、 sendFile 函数 ( Linux 2.4 优化 ) ( 2拷贝 2切换 ) 一、 零拷贝 简介 零拷贝作用 : 在网络编程中 , 如果要进行性能优化 , 肯定要涉及到零拷贝...函数 ( Linux 2.1 优化 ) ( 3拷贝2切换 ) sendFile 是 Linux 提供的函数 , 其实现了由 内核缓冲区 直接将数据拷贝到 Socket 缓冲区 , 该操作直接在内核空间完成..., 之后拷贝到协议栈时 , 变成用户状态 ; 用户态 -> 内核态 -> 用户态 五、 sendFile 函数 ( Linux 2.4 优化 ) ( 2拷贝 2切换 ) sendFile 是 Linux...2 次拷贝 , 2 2 2 次状态切换 ; 1 . sendFile 函数 数据拷贝分析 : 全称 DMA 拷贝 , 没有 CPU 拷贝 ; ① 硬盘文件 -> 内核缓冲区 : 硬盘文件数据 , DMA

68910

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券