zoukankan      html  css  js  c++  java
  • curl tftp libcurl 功能使用

    #include <curl/curl.h>
    
    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, (FILE*)stream);
    
        nread = (curl_off_t)retcode;
    
        fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
                " bytes from file
    ", nread);
        return retcode;
    }
    
    //tftp协议上传
    void fileUploadTftp()
    {
        CURL *curl;
        CURLcode res;
        FILE *hd_src;
        struct stat file_info;
        curl_off_t fsize;
    
        QString locale = ui->lineEdit_path->text();
        QFileInfo fileInfo(locale);
        QString fileName = fileInfo.fileName();
        char *locale_file = locale.toLatin1().data(); //本地文件名
        QString remote = "tftp://ip:69/" + fileName;
        char *remote_url = remote.toLatin1().data(); //服务器路径
    
        struct curl_slist *headerlist;
    
        /* get the file size of the local file */
        if(stat(locale_file, &file_info)) {
            printf("Couldnt open '%s': %s
    ", locale_file, strerror(errno));
            return;
        }
        fsize = (curl_off_t)file_info.st_size;
    
        printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.
    ", fsize);
    
        /* get a FILE * of the same file */
        hd_src = fopen(locale_file, "rb");
    
        /* In windows, this will init the winsock stuff */
        curl_global_init(CURL_GLOBAL_ALL);
    
        /* get a curl handle */
        curl = curl_easy_init();
        if(curl)
        {
            /* we want to use our own read function */
            curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
    
            /* enable uploading */
            curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
    
            /* specify target */
            curl_easy_setopt(curl,CURLOPT_URL, remote_url);
    
            /* pass in that last of FTP commands to run after the transfer */
            curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist);
    
            /* now specify which file to upload */
            curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
    
            /* Set the size of the file to upload (optional).  If you give a *_LARGE
               option you MUST make sure that the type of the passed-in argument is a
               curl_off_t. If you use CURLOPT_INFILESIZE (without _LARGE) you must
               make sure that to pass in a type 'long' argument. */
            curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE,
                             (curl_off_t)fsize);
    
            /* Now run off and do what you've been told! */
            res = curl_easy_perform(curl);
            /* Check for errors */
            if(res != CURLE_OK)
                fprintf(stderr, "curl_easy_perform() failed: %s
    ",
                        curl_easy_strerror(res));
    
            /* clean up the FTP commands list */
            curl_slist_free_all (headerlist);
    
            /* always cleanup */
            curl_easy_cleanup(curl);
        }
        fclose(hd_src); /* close the local file */
    
        curl_global_cleanup();
    }
    
  • 相关阅读:
    redis客户端连接,最大连接数查询与设置
    基于php实现QQ授权登陆 --qq授权登录
    在H5页面内通过地址调起高德地图实现导航
    数据库备份的两种方法
    ThinkPHP5.0 实现 app支付宝支付功能
    jQuery选取所有复选框被选中的值并用Ajax异步提交数据
    php 微信公众号接入支付宝支付
    MySQL查询优化
    php函数的使用技巧
    安装Django时解决的问题-mysql及访问(附pycharm激活)
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709311.html
Copyright © 2011-2022 走看看