Linuxのスプライス(2)を介してスプライシングをサポートするファイルシステムはどれですか?
-
30-09-2019 - |
質問
のためのマンページ splice
システムコール それは言う splice
失敗して設定する可能性があります errno
に EINVAL
もしも:
ターゲットファイルシステムはスプライシングをサポートしていません。記述子のいずれもパイプを参照していません。または、選択できないデバイスに与えられたオフセット
どのファイルシステムがスプライシングをサポートしていますか?
解決
私の元の答えは部分的に間違っていましたが、これは大きな書き直しです。
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_read
と default_file_splice_write
, 、 それぞれ。見る do_splice_to()
と do_splice_from()
実装用。ノート: EINVAL
ドキュメントに記載されている他の理由でまだ返品される場合があります。
他のヒント
に合わせて これ, 、ext3はします。ヒューズファイルシステムで運が悪いかもしれません。