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();
    }
    
  • 相关阅读:
    搭建环境遇到的几个问题
    webservice
    Eclipse 反编译 阅读class 文件
    设置navigationBar上面的item
    自定义的UITabbar上面的按钮的x坐标的计算方法
    UIToolbar自定义背景及按钮设置
    UITabBar实现自定义背景及UITabBarItem自定义图片和字体
    IOS APP圆形图片的实现
    如果AlertView输入框为空,则禁止点击确定按钮
    两种局部刷新UITableView的方法的使用条件
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709311.html
Copyright © 2011-2022 走看看