我们使用libcurl C API通过SFTP发送文件.使用这样的代码可以很好地工作:

....
fd = fopen(local_file_full_path.c_str(), "rb");
if (!fd)
{
    cout << "Error opening local file: " << local_file_full_path << endl;
    return -1;
}
curl_easy_setopt(curl_easy_handle, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl_easy_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl_easy_handle, CURLOPT_READDATA, fd);
curl_easy_setopt(curl_easy_handle, CURLOPT_HTTPHEADER, headerList);

然而,这意味着,即使我们有可用的数据,我们也必须将它们写入一个文件,然后将文件传递出go .

我想知道libcurl是否提供了一个选项,在这个选项中,我们可以传递一个数据流,例如一个指针到我们的数据 struct 中.如果是这样的话,我能举个例子吗?这是否意味着"接收者"端需要改变——因为我们并不拥有它.

推荐答案

你已经有了解决方案的1/2——CURLOPT_READDATA.只需将其与CURLOPT_READFUNCTION中的自定义回调配对,然后就可以在CURLOPT_READDATA中传递指向现有数据的指针,并在需要数据时让回调将该数据复制到libcurl的缓冲区中.

当libcurl需要读取数据以便将其发送给对等方时,它就会调用这个回调函数,就像您要求它将数据上传或发布到服务器一样.指针buffer指向的数据区域最多应填充size乘以nitems字节数的函数.

使用CURLOPT_READDATA选项设置userdata参数.

C++相关问答推荐

C中的ATONE会扰乱SEN/CLUTE GMS应用程序中的其他字符串

ATmega328P USART发送字符重复打印

C:scanf(%d&q;,...)输入只有一个减号

ZED for SDL上的C语言服务器

如何一次获取一个字符

难以理解Makefile隐含规则

ARM64 ASIMD固有的加载uint8_t* 到uint16x8(x3)?

模拟shell并运行.sh文件

自定义变参数函数的C预处置宏和警告 suppress ?

在为hashmap创建加载器时,我的存储桶指向它自己

将 struct 传递给函数

为什么未初始化的 struct 的数组从另一个数组获取值?

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

将回调/基于事件的C API转换为非回调API

Valgrind用net_pton()抱怨

我编写这段代码是为了判断一个数字是质数、阿姆斯特朗还是完全数,但由于某种原因,当我使用大数时,它不会打印出来

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

Linux Posix消息队列

通过GTK';传递回调参数;s g_signal_connect()导致C中出现意外值

inline 关键字导致 Clion 中的链接器错误