libcurl下载文件大小超过缓冲区大小

时间:2017-04-02 17:19:32

标签: c libcurl

我在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);
}

如果文件大小超过缓冲区大小怎么办?我认为函数不会被迭代调用,因为它每次都会覆盖文件。它有解决方法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

来自curl documentation

  

回调函数将在所有数据中传递尽可能多的数据   调用,但你不能做任何假设。它可能是一个字节   可能是成千上万。 将传递的最大正文数据量   写回调是在curl.h头文件中定义的:   CURL_MAX_WRITE_SIZE(通常默认为16K) 。如果是CURLOPT_HEADER   启用,这使得头数据传递给写回调,你   可以获得传入的CURL_MAX_HTTP_HEADER字节的头数据   它。这通常意味着100K。