问题标签 [sendfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
534 浏览

unix - 写入套接字是 sendfile() 系统调用的任意限制吗?

序幕

sendfile()是一个非常有用的系统调用,原因有两个:

首先,它比/ (或者/如果你更喜欢那个 jive)循环的代码更少。 其次,它比上述方法更快(更少的系统调用,实现可以在没有缓冲区的设备之间复制等......)。read()write()recv()send()

更少的代码。更高效。惊人的。

在 UNIX 中,一切(大部分)都是一个文件。这是柏拉图理论与现实世界实践碰撞的丑陋领域。我知道套接字与驻留在某些设备上的文件根本不同。我还没有深入研究 Linux/*BSD/Darwin/任何操作系统实现的源代码,sendfile()以了解为什么这个特定的系统调用仅限于写入套接字(特别是流式套接字)。

我只是想知道...

问题

sendfile()允许目标文件描述符成为套接字以外的东西(如磁盘文件或管道)有什么限制?

0 投票
1 回答
781 浏览

linux - sendfile() 在两个 mmaped 文件上的使用 (linux)

可以使用 sendfile() linux 系统调用将部分文件从一个 mmaped 文件发送到另一个 mmaped 文件吗?

0 投票
1 回答
1521 浏览

linux - linux write 和 sendfile 系统调用的区别

我正在编程网络服务器(C),它应该发送大文件。我的问题是:两个系统调用的主要区别是什么:writesendfile. 是否sendfile取决于套接字系统缓冲区的大小?我注意到write经常写的比我要求的少。

例如,如果对一个文件有很多请求:我应该打开它,复制到内存中并使用write,还是我可以sendfile为每个客户做?

提前感谢所有答案。

0 投票
3 回答
340 浏览

terminology - 术语:与“零拷贝”相反?

我们正在对一些已转换为使用 sendfile() 的代码进行基准测试,该代码是 linux 零拷贝系统调用。sendfile() 取代的传统 read()/write() 循环的术语是什么?即,在我们的报告中,我想说“zerocopy 是 X 毫秒,而 ??? 是 Y 毫秒”。我应该使用什么词/短语?

0 投票
1 回答
3269 浏览

c - 带有两个常规文件的 sendfile() 中的参数无效

我正在尝试测试sendfile()Linux 2.6.32 下的系统调用,以在两个常规文件之间进行零复制数据。据我了解,它应该可以工作:从 2.6.22 开始,sendfile()已经使用 实现splice()了,输入文件和输出文件都可以是常规文件或套接字。

以下是 的内容sendfile_test.c

当我运行以下命令时:

输出是

而且跑步的时候

输出包含

我究竟做错了什么?

0 投票
3 回答
4003 浏览

django - Django下载文件为空

我正在编写一个简单的函数,用于将某个文件从服务器下载到我的机器上。该文件由其 id 表示是唯一的。文件正确定位,下载完成,但下载的文件(虽然命名为服务器上的文件)是空的。我的下载功能如下所示:

我哪里错了?谢谢!

0 投票
5 回答
6237 浏览

ruby-on-rails - send_file 只是发送一个空文件

我正在寻找一种下载 xml 文件的方法。我用:

但这总是给我下载一个空文件。该文件本身有 16 KB 的数据...

这是为什么?

前知

0 投票
1 回答
1218 浏览

ruby-on-rails - rails 如何知道 send_file 何时完成

由于准备要下载的数据内容需要一些时间,所以我想在用户提交请求时显示一条消息“准备下载文件”

然后当文件准备好时,我使用 send_file 发送数据

完成后,我需要清除消息

非常感谢

0 投票
4 回答
1728 浏览

c - 使用 sendfile(),是否可以判断 in_fd 何时处于 EOF?

阅读Linux 系统调用的手册页sendfile,我想知道调用程序是否有可能知道何时in_fd处于 EOF。据推测,这可以通过返回值 0 来表示,但这会导致返回值 0 的实际含义的问题。如果sendfile是 like write,则返回值 0 仅表示复制了 0 个字节。但是,如果sendfile是 like read,那么返回值 0 将意味着 EOF。必须事先知道要复制多少字节in_fd才能out_fd使用sendfilesendfile返回0是什么意思?

0 投票
2 回答
2480 浏览

linux - Linux sendfile 源码

我在哪里可以获得 sendfile 函数源?我在内核源代码中找不到它...