Я реализовал половину API std::streambuf
для чтения (т. е. underflow()
и xsgetn()
) вокруг libcurl, чтобы к обычному 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
, тогда как последняя строка кода выше — это «выталкивающий» способ сделать это.
Можно ли заставить это работать? То есть обернуть libcurl streambuf
API как для чтения , так и для записи?
write
иwritecallback
(или что-то в этом роде), которые выглядели так, как будто они предназначались для письма. Если я не так запомнил (или неправильно прочитал), прошу прощения. - person Jerry Coffin   schedule 28.12.2013