curl: 多次下载进度回调
Curl: callback for Multiple download progress
我有两个线程调用同一个例程来使用 curl.How 下载文件,我可以使用 curl 打印每个文件同时下载的进度吗?我认为 curl 指针是唯一可以区分两个正在进行的下载回调的变量。每次调用progress回调时如何利用它打印每个文件的进度?请 advice.Thanks.Below 是片段。
struct myprog
{
char filename[10];
}
static int txfrprogress(void *p,
curl_off_t dltotal, curl_off_t dlnow,
curl_off_t ultotal, curl_off_t ulnow)
{
static L7_uint32 cnt=0;
L7_uchar8 buf[32] = {0};
struct myprog *mp = (struct myprog*)p;
cnt++;
if(!(cnt%15000)) {
sprintf(buf,"%3d%%",(int)((dlnow/dltotal)*100));
printf("Completed %s download for %s\n",buf,mp->filename);
}
return 0;
}
int mymain(char *str)
{
struct myprog prog= {0};
char filename[10]={0};
CURL *curl;
/*copy namestring received as arguement into filename*/
curl_global_init(CURL_GLOBAL_DEFAULT);
strcpy(prog.filename,filename);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, txfrprogress);
curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &prog);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
/*some code**/
return 0;
}
您可以使用 CURLOPT_XFERINFODATA 指针指向您的结构,例如包含您需要识别该个人传输的任何内容。这可以是一个 CURL *、一个数字、一个 ID、一个文件名或任何您认为好的和合适的东西。或者所有这些。
我有两个线程调用同一个例程来使用 curl.How 下载文件,我可以使用 curl 打印每个文件同时下载的进度吗?我认为 curl 指针是唯一可以区分两个正在进行的下载回调的变量。每次调用progress回调时如何利用它打印每个文件的进度?请 advice.Thanks.Below 是片段。
struct myprog
{
char filename[10];
}
static int txfrprogress(void *p,
curl_off_t dltotal, curl_off_t dlnow,
curl_off_t ultotal, curl_off_t ulnow)
{
static L7_uint32 cnt=0;
L7_uchar8 buf[32] = {0};
struct myprog *mp = (struct myprog*)p;
cnt++;
if(!(cnt%15000)) {
sprintf(buf,"%3d%%",(int)((dlnow/dltotal)*100));
printf("Completed %s download for %s\n",buf,mp->filename);
}
return 0;
}
int mymain(char *str)
{
struct myprog prog= {0};
char filename[10]={0};
CURL *curl;
/*copy namestring received as arguement into filename*/
curl_global_init(CURL_GLOBAL_DEFAULT);
strcpy(prog.filename,filename);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, txfrprogress);
curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &prog);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
/*some code**/
return 0;
}
您可以使用 CURLOPT_XFERINFODATA 指针指向您的结构,例如包含您需要识别该个人传输的任何内容。这可以是一个 CURL *、一个数字、一个 ID、一个文件名或任何您认为好的和合适的东西。或者所有这些。