我正在使用以下代码从Internet下载文件:
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);
}
}
如何测量当前下载速度(例如每秒)和完成下载所需的剩余时间?
2条答案
按热度按时间7d7tgy0s1#
你可以使用
CURLOPT_PROGRESSFUNCTION
。curl会传递5个参数给你的回调函数,clientp
,dltotal
,dlnow
,ultotal
,和ulnow
。clientp
是你提供给CURLOPT_PROGRESSDATA
的一个指针。total参数是需要下载的总量;现在的是到目前为止的数量。未知值为0。要使用此选项,必须将
CURLOPT_NOPROGRESS
设置为0。jgwigjjp2#
CURLOPT_PROGRESSFUNCTION
自v7.32.0起已弃用,您可以改用CURLOPT_XFERINFOFUNCTION
,其用法和回调结构(所有参数dltotal
、dlnow
...等)与CURLOPT_PROGRESSFUNCTION
几乎相同