man page for the splice
system call表示splice
可能会失败并将errno
设置为EINVAL
,如果符合以下条件:
目标文件系统不支持拼接;描述符都不是指管道;或不可寻找设备的偏移量
哪些文件系统支持拼接?
答案 0 :(得分:15)
我的原始答案部分不正确,这是一次重大改写。
在Linux 2.6.30.10及更早版本中,当源文件系统或目标文件系统不支持拼接时,splice
会返回EINVAL
。以下是支持拼接的文件系统:
详情如下。支持在“文件管道”案例中的do_splice_to()
函数和“管道到文件”案例中的do_splice_from()
函数中确定的拼接。这是通过分别检查相关的struct file_operations
是否包含.splice_read
或.splice_write
来完成的。为了生成上面的文件系统列表,我为fs/*/file.c
和.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
。
答案 1 :(得分:0)
根据this,EXT3确实如此。您似乎对任何FUSE文件系统都不满意。