2012-06-08 55 views
1

我需要知道我在C中使用libcurl下载的状态。我发现我必须使用CURLOPT_PROGRESSFUNCTION。libcurl c CURLOPT_PROGRESSFUNCTION

int progress_func(void* ptr, double TotalToDownload, double NowDownloaded, 
        double TotalToUpload, double NowUploaded) 
{ 
    //Bla bla 
} 

curl_easy_setopt(curl, CURLOPT_NOPROGRESS, FALSE); 
curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, progress_func); 

我不明白两两件事: 1)该功能progress_func “多久” 之称? 2)如何将其他参数传递给progress_func函数?因为我必须将连接状态(speed,tot下载)写入具有可变url的文件中,所以我必须将此url传递给函数。

感谢

+0

有关进度条的详细解答,请参阅http://stackoverflow.com/questions/10614062/libcurl-console-progress-bar-for-file-download/10614757#10614757。 – jmc

回答

3

CURLOPT_PROGRESSDATA

struct my_progress_data_struct 
{ 
    /* Some data fields */ 
}; 

struct my_progress_data_struct progress_data; 

curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &progress_data); 

的数据将在进度回调ptr参数传递。

至于第一个问题,根据API reference回调将被称为“大约每秒一次或更快”。