man page for the splice
system call表示,如果出现以下情况,splice
可能会失败,并将errno
设置为EINVAL
:
目标文件系统不支持拼接;两个描述符都不引用管道;也不支持为不可查找的设备指定偏移量
哪些文件系统支持拼接?
发布于 2010-09-08 21:20:34
我最初的回答是部分错误的,这是一个主要的重写。
Linux 2.6.30.10及更低版本
在Linux2.6.30.10及更早的版本中,当源或目标文件系统不支持拼接时,splice
会返回EINVAL
。以下是支持拼接的文件系统
详细信息如下。对拼接的支持在“文件到管道”情况下的函数和“管道到文件”情况下的函数中确定。通过检查相关的struct file_operations
是否分别包含.splice_read
或.splice_write
__来完成。为了生成上面的文件系统列表,我为.splice_read
和.splice_write
创建了fs/*/file.c
。
Linux 2.6.31及更高版本
从Linux2.6.31开始,所有的文件系统在读写模式中都支持拼接。
详细信息如下。当文件系统的struct file_operations
__中没有.splice_read
或.splice_write
时,将使用一个后备函数:分别为default_file_splice_read
和default_file_splice_write
__。有关实现,请参阅和。注意:由于文档中列出的其他原因,仍可能会返回EINVAL
。
发布于 2010-09-04 03:08:57
根据this的说法,EXT3做到了。看起来您可能对任何FUSE文件系统都不感兴趣。
https://stackoverflow.com/questions/3638657
复制相似问题