sendfile() 无法复制普通文本文件
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
sendfile()
背后的想法是通过套接字快速发送文件(想想 Web 服务器)。常规文件可以进行 mmap() 处理,但不是套接字,因此当您将常规文件作为目标时,它就会崩溃。The idea behind
sendfile()
is to quickly send a file over a socket (think web servers). Regular files can bemmap()
ed, but are not sockets, so it's blowing up when you hand it a regular file as the destination.