我使用以下代码从互联网上下载文件:
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
size_t written;
written = fwrite(ptr, size, nmemb, stream);
return written;
}
int main(int argc, char** argv)
{
FILE *downloaded_file;
if ( (downloaded_file = fopen (download_path , "w" ) ) != NULL )
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "www.asd.com/files/file_to_download.rar");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, downloaded_file);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
if (res == CURLE_OK)
{
printf("Download complete!\n");
}
}
fclose(downloaded_file);
}
}
如何衡量当前下载速度(例如每秒)以及完成下载的剩余时间?
答案 0 :(得分:5)
您可以使用CURLOPT_PROGRESSFUNCTION
。 curl会将5个参数传递给您的回调函数clientp
,dltotal
,dlnow
,ultotal
和ulnow
。 clientp
是您使用CURLOPT_PROGRESSDATA
提供的指针。总参数是需要下载的总金额;现在的数量是到目前为止的金额。未知值为0.
要使用此功能,您必须将CURLOPT_NOPROGRESS
设置为0。