The example you are using is incorrect. See the easy_setopt man page. In the example, write_data uses its own FILE, * outfile, not the fp specified in CURLOPT_WRITEDATA. Therefore closing fp causes problems - it doesn't even open.
This is more or less what it should look like (no libcurl available here for testing)
#include <stdio.h> #include <curl/curl.h> /* For older cURL versions you will also need #include <curl/types.h> #include <curl/easy.h> */ #include <string> size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written = fwrite(ptr, size, nmemb, stream); return written; } int main(void) { CURL *curl; FILE *fp; CURLcode res; char *url = "http://localhost/aaa.txt"; char outfilename[FILENAME_MAX] = "C:\\bbb.txt"; curl = curl_easy_init(); if (curl) { fp = fopen(outfilename,"wb"); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl); /* always cleanup */ curl_easy_cleanup(curl); fclose(fp); } return 0; }
Updated: as suggested by @rsethc types.h and easy.h no longer in current versions of cURL.
fvu Oct 28 '09 at 10:33 2009-10-28 10:33
source share