1

我已经在 libcurl 周围实现了std::streambufAPI 的读取部分(即underflow()xsgetn()),以便普通人istream可以将这样的streambuf插件插入其中并从 HTTP 或 FTP 服务器检索内容。它工作得很好。

现在我想实现 API 的写入部分(即overflow()xsputn()),用于将文件上传到 FTP 服务器以执行以下操作:

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"

问题是 libcurl 通过设置的读取回调函数使用“拉”API,CURLOPT_READFUNCTION而上面的最后一行代码是“推”的方式。

这可以工作吗?即,用streambufAPI 包装 libcurl 以进行读写

4

1 回答 1

0

我对 libcurl API 知之甚少,但我希望它会提取数据,直到所有数据都用完。由于 IOStreams 有一个 push 接口,它不会轻易地与 pull 接口结合,看起来你最好实现一个流来缓冲所有输出,直到它完成,此时有 libcurl pull 用于现成的缓冲区。您可能sync()什么都不做,而是提供一个自定义函数,例如,send()在您的流上,这是将控制权移交给 libcurl 的触发器,直到它的业务停止。

另一种方法是使用一个线程让 libcurl 拉上,另一个线程写入流,并在 libcurl 拉取数据时提供写入到 libcurl 的位。

于 2013-12-28T01:12:30.183 回答