使用std :: streambuf包装libcurl进行上传?

时间:2013-12-28 00:00:51

标签: c++ libcurl ftp-client streambuf

我已经在libcurl周围实现了std::streambuf API的读取一半(即underflow()xsgetn()),以便普通的istream可以拥有这样的streambuf 1}}插入其中并从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通过CURLOPT_READFUNCTION通过读回调函数设置使用“拉”API,而上面的最后一个代码行是一种“推送”方式。

这可以使用吗?即,使用streambuf API包装libcurl以读取

1 个答案:

答案 0 :(得分:0)

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

另一种方法是使用一个线程让libcurl接通,另一个线程写入流并提供写入libcurl的位,当它提取数据时。