我正在实现此代码,但收到错误消息。
http://curl.haxx.se/libcurl/c/ftpupload.html
错误就在这段代码中。
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
{
curl_off_t nread;
/* in real-world cases, this would probably get this data differently
as this fread() stuff is exactly what the library already would do
by default internally */
size_t retcode = fread(ptr, size, nmemb, stream);
nread = (curl_off_t)retcode;
fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
" bytes from file\n", nread);
return retcode;
}
错误是...
IntelliSense: argument of type "void *" is incompatible with parameter of type "FILE *"
和
Error C2664: 'fread' : cannot convert parameter 4 from 'void *' to 'FILE *'
任何提示都会很有用。我不明白为什么我们要将 void *stream 传递给函数。那有什么意思?指向空的指针?
它在这里被调用。
/* we want to use our own read function */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
卷曲 API
CURLOPT_READFUNCTION
传递一个指向与以下原型匹配的函数的指针: size_t function( void *ptr, size_t size, size_t nmemb, void *userdata); 当 libcurl 需要读取数据以便将其发送到对等方时,该函数就会被调用。指针 ptr 指向的数据区域最多可以用 size 乘以 nmemb 字节数来填充。您的函数必须返回您存储在该内存区域中的实际字节数。返回 0 将向库发出文件结束信号并使其停止当前传输。
如果您通过“提前”返回 0 来停止当前传输(即在服务器预期它之前,例如当您说您将上传 N 个字节并且您上传少于 N 个字节时),您可能会遇到服务器“挂起” " 等待其他不会出现的数据。
读取回调可能会返回 CURL_READFUNC_ABORT 以立即停止当前操作,从而导致传输中的 CURLE_ABORTED_BY_CALLBACK 错误代码(在 7.12.1 中添加)
从 7.18.0 开始,该函数可以返回 CURL_READFUNC_PAUSE,这将导致从此连接的读取暂停。有关详细信息,请参阅 curl_easy_pause(3)。
Bugs:在进行TFTP上传时,必须返回回调想要的确切数据量,否则将被服务器端视为最终数据包,传输将在那里结束。
如果将此回调指针设置为 NULL,或者根本不设置,将使用默认的内部读取函数。它正在使用 CURLOPT_READDATA 对 FILE * userdata 集执行 fread()。
我有点超出我的深度。