libcurl 在 C 中对 curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, function) 的第三个参数做了什么
What is libcurl doing with the third parameter on curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, function) in C
我正在做一个简单的程序,它从 api 获取数据并按照文档创建回调函数以传递给 curl_easy_setopt:
size_t callback_libcurl(void *contents, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct resultado *mem = (struct resultado *)userp;
char *ptr = realloc(mem->dados, mem->tamanho + realsize + 1);
if(ptr == NULL) {
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
然后将其传递给:
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);
一切正常,但我不知道为什么。我如何将回调函数传递给 curl 函数?
文档说参数可以是 long、函数指针、对象指针或 curl_off_t。
它是那个 afaik 的 none。
我能找到的唯一来源是:
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
on /curl/easy.h 但这也无济于事,我不知道...是什么。在上面找不到任何内容。
我错过了什么?
The docs say the parameter can be a long, a function pointer, an object pointer or a curl_off_t. It is none of that afaik.
在 C 中,函数会在适当的时候自动退化为函数指针。所以以下是等价的:
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, &callback_libcurl);
因此你正在传递一个函数指针,一个指向callback_libcurl
。
我正在做一个简单的程序,它从 api 获取数据并按照文档创建回调函数以传递给 curl_easy_setopt:
size_t callback_libcurl(void *contents, size_t size, size_t nmemb, void *userp) {
size_t realsize = size * nmemb;
struct resultado *mem = (struct resultado *)userp;
char *ptr = realloc(mem->dados, mem->tamanho + realsize + 1);
if(ptr == NULL) {
printf("not enough memory (realloc returned NULL)\n");
return 0;
}
然后将其传递给:
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);
一切正常,但我不知道为什么。我如何将回调函数传递给 curl 函数?
文档说参数可以是 long、函数指针、对象指针或 curl_off_t。
它是那个 afaik 的 none。
我能找到的唯一来源是:
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
on /curl/easy.h 但这也无济于事,我不知道...是什么。在上面找不到任何内容。
我错过了什么?
The docs say the parameter can be a long, a function pointer, an object pointer or a curl_off_t. It is none of that afaik.
在 C 中,函数会在适当的时候自动退化为函数指针。所以以下是等价的:
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, callback_libcurl);
curl_easy_setopt(handler_curl, CURLOPT_WRITEFUNCTION, &callback_libcurl);
因此你正在传递一个函数指针,一个指向callback_libcurl
。