• 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();
    }
    
  • 相关阅读:
    博客作业06--图
    博客作业05--查找
    博客作业04--树
    博客作业03--栈和队列
    博客作业2---线性表
    博客作业01-抽象数据类型
    C语言最后一次博客作业
    C语言第十次博客作业--结构体
    C语言第九次博客作业--指针
    C语言第八次博客作业--字符数组
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709311.html
Copyright © 2020-2023  润新知