システムコールのマニュアルページには、splice
失敗splice
する可能性があり、次の場合に設定さerrno
れると記載されていEINVAL
ます。
ターゲット ファイル システムはスプライシングをサポートしていません。どちらの記述子もパイプを参照していません。またはシークできないデバイスに指定されたオフセット
スプライシングをサポートするファイル システムはどれですか?
システムコールのマニュアルページには、splice
失敗splice
する可能性があり、次の場合に設定さerrno
れると記載されていEINVAL
ます。
ターゲット ファイル システムはスプライシングをサポートしていません。どちらの記述子もパイプを参照していません。またはシークできないデバイスに指定されたオフセット
スプライシングをサポートするファイル システムはどれですか?
私の最初の答えは部分的に間違っていました。これは大幅な書き直しです。
Linux 2.6.30.10 以前では、ソースまたはターゲット ファイルシステムがスプライシングをサポートしていない場合にsplice
返されます。スプライシングをサポートEINVAL
するファイルシステムは次のとおりです。
詳細は次のとおりです。do_splice_to()
「ファイルからパイプへ」の場合の関数と「ファイルへのパイプ」の場合の関数で決定されたスプライシングのサポートdo_splice_from()
。関連するにまたはがそれぞれstruct file_operations
含まれているかどうかを確認することによって行われます。上記のファイルシステムのリストを作成するために、とを grepし.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
ドキュメントに記載されているその他の理由で返品される場合があります。
これによると、 EXT3はします。どの FUSE ファイル システムでもうまくいかないようです。