系统调用的手册页splice
说splice
可能会失败并设置errno
为EINVAL
:
目标文件系统不支持拼接;两个描述符都不指管道;或为不可搜索设备提供的偏移量
哪些文件系统支持拼接?
我的原始答案部分不正确,这是一次重大改写。
在 Linux 2.6.30.10 及更早版本中,当源或目标文件系统不支持拼接时splice
返回。EINVAL
以下是支持拼接的文件系统:
详情如下。do_splice_to()
在“文件到管道”情况下的do_splice_from()
函数和“管道到文件”情况下的函数中确定是否支持拼接。它是通过分别检查相关是否struct file_operations
包含.splice_read
或来完成的.splice_write
。为了生成上述文件系统列表,我已经fs/*/file.c
使用grep.splice_read
和.splice_write
.
从 Linux 2.6.31 开始,所有文件系统都支持读写模式的拼接。
详情如下。当文件系统没有.splice_read
或.splice_write
在其中struct file_operations
时,将使用回退函数:default_file_splice_read
和default_file_splice_write
,分别。参见do_splice_to()
和do_splice_from()
实现。注意:EINVAL
可能仍会因文档中列出的其他原因被退回。
据此,EXT3可以。似乎您可能对任何 FUSE 文件系统都不走运。