Linuxのスプライス(2)を介してスプライシングをサポートするファイルシステムはどれですか?

StackOverflow https://stackoverflow.com/questions/3638657

質問

のためのマンページ splice システムコール それは言う splice 失敗して設定する可能性があります errnoEINVAL もしも:

ターゲットファイルシステムはスプライシングをサポートしていません。記述子のいずれもパイプを参照していません。または、選択できないデバイスに与えられたオフセット

どのファイルシステムがスプライシングをサポートしていますか?

役に立ちましたか?

解決

私の元の答えは部分的に間違っていましたが、これは大きな書き直しです。

Linux 2.6.30.10以下

Linux 2.6.30.10以上で、 splice 戻り値 EINVAL ソースまたはターゲットファイルシステムがスプライシングをサポートしていない場合。ここにあります スプライシングをサポートするファイルシステム:

  • 読み取りモード: :ADFS、AFF、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 にとって .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 ドキュメントに記載されている他の理由でまだ返品される場合があります。

他のヒント

に合わせて これ, 、ext3はします。ヒューズファイルシステムで運が悪いかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top