我在https://curl.haxx.se/libcurl/c/ftpget.html
上对此代码有疑问在回叫功能
中static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)
{
struct FtpFile *out=(struct FtpFile *)stream;
if(out && !out->stream) {
/* open file for writing */
out->stream=fopen(out->filename, "wb");
if(!out->stream)
return -1; /* failure, can't open file to write */
}
return fwrite(buffer, size, nmemb, out->stream);
}
如果文件大小超过缓冲区大小怎么办?我认为函数不会被迭代调用,因为它每次都会覆盖文件。它有解决方法吗?谢谢!
答案 0 :(得分:2)
来自curl documentation:
回调函数将在所有数据中传递尽可能多的数据 调用,但你不能做任何假设。它可能是一个字节 可能是成千上万。 将传递的最大正文数据量 写回调是在curl.h头文件中定义的: CURL_MAX_WRITE_SIZE(通常默认为16K) 。如果是CURLOPT_HEADER 启用,这使得头数据传递给写回调,你 可以获得传入的CURL_MAX_HTTP_HEADER字节的头数据 它。这通常意味着100K。