我正在执行以下 curl 调用以从我的网站读取数据:
curl_easy_setopt(handle, CURLOPT_URL, "http://mysite.com");
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_data);
CURLcode code = curl_easy_perform(handle);
这是我的回调方法,write_data:
size_t write_data(void *buffer, size_t len, size_t nmemb, void *userp) {
const char* _file = "file_path";
FILE* _dataFile = fopen(_file, "a+");
if (!_dataFile) {
logMsg("Failed to open file to write to it");
exit(EXIT_FAILURE);
}
int num = fprintf(_dataFile, "%s", (char *) buffer);
fclose(_dataFile);
return num;
}
我正在以块的形式获取数据,并且在 gdb'ing 上我意识到在最后一次调用中,我得到了 12303 字节,但写入了 12310。在我看来,问题出在我编写内容文件的方式上,通过强制转换char 的缓冲区。
所以,我的问题是写入数据(到文件)、从 Curl 调用读取而不进行额外复制的最佳方法是什么?如果我通过 malloc'ing 一个带有nmemb
字节的 char 数组接收到的缓冲区的副本并将其附加到文件中,则此方法成功。
我还想知道是否有任何其他函数可以将格式化数据写入文件,我可以使用它来代替 fprintf。