1

私はstd::streambufAPI の読み取り半分 (すなわちunderflow()xsgetn()) を libcurl の周りに実装しました。これにより、通常のistreamユーザーがこのようなstreambufプラグインをプラグインして、HTTP または FTP サーバーからコンテンツを取得できるようになります。それはうまくいきます。

ここで、ファイルを FTP サーバーにアップロードして次のようなことを行うために、API の半分の書き込み (つまり、overflow()および)を実装したいと思います。xsputn()

ostream os( my_curl_streambuf );
curl_easy_setopt( my_curl_handle, CURLOPT_UPLOAD, 1L );
os << is->rdbuf(); // copy entire contents of istream "is" to ostream "os"

CURLOPT_READFUNCTION問題は、上記の最後のコード行がそれを行う「プッシュ」方法であるのに対し、libcurl は read-callback 関数セットを介して「プル」API を使用することです。

これを機能させることはできますか?つまり、読み取りと書き込みの両方で libcurl をstreambufAPIでラップしますか?

4

1 に答える 1

0

私は libcurl API について十分に知りませんが、すべてのデータが使い果たされるまでデータをプルすることを期待しています。IOStreams にはプッシュ インターフェイスがあり、プル インターフェイスと簡単に結合できないため、すべての出力が完了するまでバッファリングするストリームを実装し、この時点ですぐに利用できるバッファ用に libcurl pull を使用するのが最善のようです。おそらくsync()何もせず、代わりにカスタム関数をsend()ストリームに提供します。これは、ビジネスが停止するまで libcurl に制御を渡すトリガーとなります。

別のアプローチは、libcurl のスレッドを使用してプルし、別のスレッドを使用してストリームに書き込み、データをプルするときに libcurl に書き込まれたビットをフィードすることです。

于 2013-12-28T01:12:30.183 に答える