18

系统调用手册页splicesplice可能会失败并设置errnoEINVAL

目标文件系统不支持拼接;两个描述符都不指管道;或为不可搜索设备提供的偏移量

哪些文件系统支持拼接?

4

2 回答 2

15

我的原始答案部分不正确,这是一次重大改写。

Linux 2.6.30.10 及以下

在 Linux 2.6.30.10 及更早版本中,当源或目标文件系统不支持拼接时splice返回。EINVAL以下是支持拼接的文件系统

  • 在读取模式下:adfs、affs、afs、bfs、btrfs、coda、ecryptfs、exofs、ext2、ext3、ext4、fat、fuse、hpfs、jffs2、jfs、minix、nfs、nilfs2、ntfs、ocfs2、omfs、qnx4、 reiserfs、smbfs、sysv、ubifs、udf、ufs。
  • 写入模式:exofs、ext2、ext3、ext4、jfs、ocfs2、reiserfs、ubifs。

详情如下。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 及以上

从 Linux 2.6.31 开始,所有文件系统都支持读写模式的拼接

详情如下。当文件系统没有.splice_read.splice_write在其中struct file_operations时,将使用回退函数:default_file_splice_readdefault_file_splice_write,分别。参见do_splice_to()do_splice_from()实现。注意:EINVAL可能仍会因文档中列出的其他原因被退回。

于 2010-09-08T13:20:33.927 回答
0

据此,EXT3可以似乎您可能对任何 FUSE 文件系统都不走运。

于 2010-09-03T19:08:56.550 回答