我已经在 libcurl 周围实现了std::streambuf
API 的读取部分(即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
而上面的最后一行代码是“推”的方式。
这可以工作吗?即,用streambuf
API 包装 libcurl 以进行读写?