我正在设计一个C++
回调函数,它将size_t size
字节从缓冲区写入 C++ 中的文件。但是,为了理智,我必须检查是否fwrite
返回 aerrno
例如EACESS
. 函数本身是 和 之间的C
接口C++
。果然,我写了一个伪代码(几乎是真实的代码):
static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream){
int nwritten = size;
while(nwritten > 0){
int written = fwrite(ptr, size, nmemb, (FILE*)stream);
if(written < 0 && errno == EACESS){
// try again
written = 0;
}
/* check some other errors which may be recoverable
nwritten -= written;
}
该函数本身是从libcurl调用的:
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
关键是要确保将size_t written = size
字节写入文件。我使用 afwrite
而不是任何其他方法的原因是因为该函数write_data
作为回调传递给执行HTTP
请求的方法,进行一些文件传输并将文件内容写入本地文件。我不确定这种方法是否有效。你们能告诉我这种方法是否可行,或者我可能遇到的潜在麻烦吗?如果有更好的方法?谢谢