sendfile() 无法复制普通文本文件

发布于 2024-10-25 18:33:11 字数 408 浏览 0 评论 0原文

sendfile 的问题是它无法使用文件 fds 复制两个文本文件。 错误是EINVAL。 // 描述符无效或被锁定,或者类似 mmap() 的操作对于 in_fd 不可用。

这究竟意味着什么?

从 sendfile ( man sendfile ) 的手册页中我找到了这个语句。不确定复制两个常规文件是否有效。

目前(Linux 2.6.9):in_fd,必须对应于支持类似mmap()操作的文件(即,它不能是套接字);和 out_fd 必须引用套接字。

   Applications may wish to fall back to read(2)/write(2) in the case where sendfile() fails with EINVAL or ENOSYS.

The problem with sendfile is it can't copy two text files using the file fds.
The error is EINVAL.
// Descriptor is not valid or locked, or an mmap()-like operation is not available for in_fd.

What does this really mean ?

From the man page of sendfile ( man sendfile ) I found this statement. Not sure if it will work to copy two regular files or not.

Presently (Linux 2.6.9): in_fd, must correspond to a file which supports mmap()-like operations (i.e., it cannot be a socket); and
out_fd must refer to a socket.

   Applications may wish to fall back to read(2)/write(2) in the case where sendfile() fails with EINVAL or ENOSYS.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

路还长,别太狂 2024-11-01 18:33:11

sendfile() 背后的想法是通过套接字快速发送文件(想想 Web 服务器)。常规文件可以进行 mmap() 处理,但不是套接字,因此当您将常规文件作为目标时,它就会崩溃。

The idea behind sendfile() is to quickly send a file over a socket (think web servers). Regular files can be mmap()ed, but are not sockets, so it's blowing up when you hand it a regular file as the destination.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文