システムコールのマニュアルページには、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_writefs/*/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 ファイル システムでもうまくいかないようです。