1. 适用范围
      本文档介绍SylixOS下通过curl中间件下载文件的流程,使用者应熟悉SylixOS以及curl中间件。
2. 下载流程
2.1 资源准备
    文件下载依赖curl中间件,故下载前需基于SylixOS进行curl中间件移植,移植过程本文档不做详细介绍,请参照《SylixOS下中间件移植手册》。
2.2 下载流程
      文件下载前需获取可用的下载url,使用curl中间件提供的接口进行文件下载。下载流程如程序清单 2.1所示。
程序清单 2.1  文件下载流程
#include <stdio.h>
#include <string.h>
#include "curl/curl.h"
/***************************************************************************
** 函数名称: write_data
** 功能描述: 回调函数
** 输  入  : ptr      写数据指针
**           size   写入块字节数
**           nmemb      写数据块数
**           stream     目标文件指针
** 输  出  : 写入块数
** 返  回  : written
***************************************************************************/
size_t  write_data (void  *ptr, size_t  size, size_t  nmemb, FILE  *stream)
{size_t written = fwrite(ptr, size, nmemb, stream);return written;
}
/***************************************************************************
** 函数名称: fileDownload
** 功能描述: 下载函数
** 输  入  : pcAddressUrl 下载地址
**           pcFileName     下载文件名
** 输  出  : NONE
** 返  回  : ERROR_NONE
***************************************************************************/
int fileDownload (char  *pcAddressUrl, char  *pcFileName)
{CURLcode    curlRet;CURL        *curl  = LW_NULL;FILE        *fp          = LW_NULL;char        *url         = pcAddressUrl;                    /*  下载网址                    */char        *filename = pcFileName;                      /*  下载文件名字                */curl = curl_easy_init();                                       /*  初始化 curl 会话            */if (!curl) {printf("curl_easy_init failed\n");return  (PX_ERROR);}fp = fopen(filename, "w+");                                    /*  打开文件                    */if (!fp) {printf("fopen failed\n");return  (PX_ERROR);}curlRet = curl_easy_setopt(curl, CURLOPT_URL, url);            /*  设置 url                    */if (curlRet != CURLE_OK) {fclose(fp);curl_easy_cleanup(curl);return  (PX_ERROR);}curlRet = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);/*  设置回调函数                */if (curlRet != CURLE_OK) {fclose(fp);curl_easy_cleanup(curl);return  (PX_ERROR);}curlRet = curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);      /*  设置写入文件句柄             */if (curlRet != CURLE_OK) {fclose(fp);curl_easy_cleanup(curl);return  (PX_ERROR);}curlRet = curl_easy_perform(curl);                            /*  完成传输函数                */if (curlRet != CURLE_OK) {fclose(fp);curl_easy_cleanup(curl);return  (PX_ERROR);}fclose(fp);curl_easy_cleanup(curl);                                 /*  释放内存                    */return  (ERROR_NONE);
}
/***************************************************************************
** 函数名称: main
** 功能描述: 进程主函数
** 输  入  : argc    入参个数
**           argv    入参数组
** 输  出  : NONE
** 返  回  : ERROR_CODE
***************************************************************************/
int  main (int  argc, char  **argv)
{int  iRet = -1;printf("start download...\n");/**  下载文件*  UPDATE_URL       下载地址*  UPDATE_FILE_NAME 下载保存文件名*/iRet = fileDownload(UPDATE_URL, UPDATE_FILE_NAME);if (iRet != ERROR_NONE) {printf("file down failed\n");return  (PX_ERROR);}return  (ERROR_NONE);
}

参考资料:libcurl官网源码

通过curl下载文件相关推荐

  1. PHP中,使用CURL下载文件

    如果使用CURL下载从微信手机端上传的图片?参考下面代码 /*** CURL下载文件 成功返回文件名,失败返回false* @param $url* @param string $savePath* ...

  2. 【ERROR】curl下载文件并保留文件名

    curl下载文件的时候如果遇到 www.xxxx.com?id=123这种类型的网址,在下载文件的时候使用 -O 参数,下载的文件名会是id=123.网上查了很久发现还有一个参数 -J 可以保留文件名 ...

  3. CURL下载文件简易进度条

    背景 curl下载文件比较方便,sample里的进度打印比较鸡肋,网上搜了一下C打印进度条,随便改改,就ok了,代码贴起来! curl 回调函数进度打印输出 int download_progress ...

  4. PHP--使用curl下载文件

    一般PHP用curl下载文件,是用变量存储curl接受到的数据,再写入文件里. 这样子有不好的一点,如果文件的结果比较大,那么会占用很大的内存 $ch = curl_init(); curl_seto ...

  5. 利用curl下载文件(进度条显示) 代码片段

    在项目中需要用到程序更新的功能,同事介绍说是curl中的开发库很不错,于是下载这个包测试了一下,确实不错.准备正式用到项目中,以下一个例子用于从互联网上抓取一个文件下载到本地,并加上进度条显示,做得挺 ...

  6. wget,curl 下载文件

    1.  wget下载单个文件 wget -c https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.fa.gz -O ../hg38 ...

  7. php抓取curl下载文件,PHP 利用 Curl 函数实现多线程抓取网页和下载文件

    PHP 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,因此经常需要借助Cur ...

  8. 命令行curl上传文件_命令行基础知识:使用cURL下载文件

    命令行curl上传文件 Client URL, or simple cURL is a library and command-line utility for transferring data b ...

  9. 如何在GitHub正确地使用 Curl 下载文件?

    Curl是在 Linux 终端中下载文件的绝佳工具. 下载与原始文件同名的文件的常用语法非常简单: curl -O URL_of_the_file 这在大多数情况下都有效,但是,您会注意到,有时当您从 ...

  10. php端curl下载文件

    $ch=curl_init('下载文件url地址'); $downloadPath='文件保存路径'; $downloadPathName=$downloadPath.'文件名'; $fp=fopen ...

最新文章

  1. BZOJ 2138 stone(霍尔定理推论,线段树)【BZOJ 修复工程】
  2. 36张图详解网络基础知识
  3. mysql实验的好处_用好UniProt 数据库,蛋白实验不用愁
  4. Java GUI 基础知识2 监听机制
  5. python怎样实现多表连接_Python Day45多表连接查询
  6. HDU.1001 Sum Problem
  7. 周立功USB-CANII(linux版)与Qt线程结合
  8. 泛函分析 04.06 有界线性算子 - 习题课
  9. php实现室内地图导航,室内三维地图引擎功能
  10. 高等数学:第一章 函数与极限(6)极限存在准则、两个重要极限
  11. ie不支持includes_IE11 – 对象不支持属性或方法“includes” – javascript window.location.hash...
  12. 抓包软件charles
  13. 主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思
  14. P4643 [国家集训队]阿狸和桃子的游戏
  15. 标准蕃茄钟_12月开始设计项目:番茄钟
  16. Linux下安装firefox最新版
  17. 利用G25祖源计算器坐标画PCA散点图
  18. 安卓APP中启动微信小程序,闪一下无法打开问题
  19. Word笔记----wps插入的图片像素降低了怎么办?
  20. Unity 加密狗加密

热门文章

  1. cold fusion
  2. 简述中国古代建筑的特点
  3. 《程序员》2013年1期精彩内容:产品设计
  4. JDK1.8HashMap源码级分析
  5. 佳能相机 C# 编程
  6. Mysql 去年、前年、上季度、上两个季度写法
  7. adb mysql_ADB - 黑小莲花 - 博客园
  8. 解决typescript报错:不能调用可能是未定义的对象
  9. 【面试题】Java常见面试题集锦
  10. linux下c/c++程序调试拾遗