2011-03-23 5 views
0

sendfileの問題は、ファイルfdsを使用して2つのテキストファイルをコピーできないことです。 エラーはEINVALです。 //ディスクリプタが有効でないかロックされているか、またはin_fdでmmap()のような操作が使用できません。sendfile()は通常のテキストファイルをコピーできません

これは実際にはどういう意味ですか?

sendfile(man sendfile)のmanページから、この文が見つかりました。 2つの通常のファイルをコピーするかどうかはわかりません。

現在、(Linux 2.6.9):in_fdは、mmap()のような操作をサポートするファイルに対応していなければなりません(つまり、ソケットにすることはできません)。 out_fdはソケットを参照する必要があります。

Applications may wish to fall back to read(2)/write(2) in the case where sendfile() fails with EINVAL or ENOSYS. 

答えて

1

sendfile()の背後にあるアイデアは、すぐにソケット(ファイルサーバー)にファイルを送信することです。通常のファイルはmmap()とすることができますが、ソケットではないため、通常のファイルを宛先として渡すと爆発します。

+0

マニュアルページの場合も同様です。今私はstdを使用しています。 C++の方法。 ofstream << ifstream.rdbuf()。 Linux固有のものであっても良い方法はありますか? – siddhusingh

+0

実際はありません。一般に、このファイルをここにコピーするシステムコールを提供するOSはありません。 – geekosaur

関連する問題