libcurl ftp下载实例

从ftp站点下载文件的例子.

view plaincopy to clipboardprint?
#include <stdio.h>;  
#include <curl/curl.h>;  
#include <curl/types.h>;  
#include <curl/easy.h>;  

struct FtpFile   //定义一个结构为了传递给my_fwrite函数.可用curl_easy_setopt的CURLOPT_WRITEDATA选项传递  
{  
        char *filename;  
        FILE *stream;  
};  

int my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream)  
{  
        struct FtpFile *out=(struct FtpFile *)stream; // stream指针其实就是 指向struct FtpFile ftpfile的  
        if(out && !out->stream)  
        {  
                out->stream=fopen(out->filename, "wb"); //没有这个流的话就创建一个 名字是out->filename.  
                if(!out->stream)  
                return -1;  
        }  
        return fwrite(buffer, size, nmemb, out->stream);  
}  

int main(int argc, char *argv[])  
{  
        CURL *curl;  
        CURLcode res;  
        struct FtpFile ftpfile={argv[2],NULL}; //初始化一个FtpFile结构   
        curl_global_init(CURL_GLOBAL_DEFAULT);  

        curl = curl_easy_init();  
        if(curl)  
        {  
                curl_easy_setopt(curl, CURLOPT_URL,argv[1]);   

                curl_easy_setopt(curl, CURLOPT_USERPWD,"user:passwd");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);  
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); //给相关函数的第四个参数 传递一个结构体的指针  
                curl_easy_setopt(curl, CURLOPT_VERBOSE, TRUE); //CURLOPT_VERBOSE 这个选项很常用 用来在屏幕上显示对服务器相关操作返回的信息  

                res = curl_easy_perform(curl);  
                curl_easy_cleanup(curl);  

                if(CURLE_OK != res)  
                        fprintf(stderr, "curl told us %d/n", res);  
        }  
        if(ftpfile.stream)  
        fclose(ftpfile.stream);  
        curl_global_cleanup();  

        return 0;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值