【发布时间】:2013-09-23 23:56:31
【问题描述】:
我正在执行以下 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 调用读取而不进行额外复制的最佳方法是什么?
如果我通过使用 nmemb 字节对 char 数组进行 malloc 处理来复制收到的缓冲区并将其附加到文件中,则此方法成功。
我也想知道是否有任何其他函数可以将格式化数据写入文件,我可以使用它来代替 fprintf。
【问题讨论】:
标签: c curl libcurl void-pointers arrays