通过curl下载文件
本文档介绍SylixOS下通过curl中间件下载文件的流程,使用者应熟悉SylixOS以及curl中间件。
2.1 资源准备
文件下载依赖curl中间件,故下载前需基于SylixOS进行curl中间件移植,移植过程本文档不做详细介绍,请参照《SylixOS下中间件移植手册》。
文件下载前需获取可用的下载url,使用curl中间件提供的接口进行文件下载。下载流程如程序清单 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下载文件相关推荐
- PHP中,使用CURL下载文件
如果使用CURL下载从微信手机端上传的图片?参考下面代码 /*** CURL下载文件 成功返回文件名,失败返回false* @param $url* @param string $savePath* ...
- 【ERROR】curl下载文件并保留文件名
curl下载文件的时候如果遇到 www.xxxx.com?id=123这种类型的网址,在下载文件的时候使用 -O 参数,下载的文件名会是id=123.网上查了很久发现还有一个参数 -J 可以保留文件名 ...
- CURL下载文件简易进度条
背景 curl下载文件比较方便,sample里的进度打印比较鸡肋,网上搜了一下C打印进度条,随便改改,就ok了,代码贴起来! curl 回调函数进度打印输出 int download_progress ...
- PHP--使用curl下载文件
一般PHP用curl下载文件,是用变量存储curl接受到的数据,再写入文件里. 这样子有不好的一点,如果文件的结果比较大,那么会占用很大的内存 $ch = curl_init(); curl_seto ...
- 利用curl下载文件(进度条显示) 代码片段
在项目中需要用到程序更新的功能,同事介绍说是curl中的开发库很不错,于是下载这个包测试了一下,确实不错.准备正式用到项目中,以下一个例子用于从互联网上抓取一个文件下载到本地,并加上进度条显示,做得挺 ...
- wget,curl 下载文件
1. wget下载单个文件 wget -c https://hgdownload.soe.ucsc.edu/goldenPath/hg38/bigZips/hg38.fa.gz -O ../hg38 ...
- php抓取curl下载文件,PHP 利用 Curl 函数实现多线程抓取网页和下载文件
PHP 利用 Curl Functions 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,因此经常需要借助Cur ...
- 命令行curl上传文件_命令行基础知识:使用cURL下载文件
命令行curl上传文件 Client URL, or simple cURL is a library and command-line utility for transferring data b ...
- 如何在GitHub正确地使用 Curl 下载文件?
Curl是在 Linux 终端中下载文件的绝佳工具. 下载与原始文件同名的文件的常用语法非常简单: curl -O URL_of_the_file 这在大多数情况下都有效,但是,您会注意到,有时当您从 ...
- php端curl下载文件
$ch=curl_init('下载文件url地址'); $downloadPath='文件保存路径'; $downloadPathName=$downloadPath.'文件名'; $fp=fopen ...
最新文章
- BZOJ 2138 stone(霍尔定理推论,线段树)【BZOJ 修复工程】
- 36张图详解网络基础知识
- mysql实验的好处_用好UniProt 数据库,蛋白实验不用愁
- Java GUI 基础知识2 监听机制
- python怎样实现多表连接_Python Day45多表连接查询
- HDU.1001 Sum Problem
- 周立功USB-CANII(linux版)与Qt线程结合
- 泛函分析 04.06 有界线性算子 - 习题课
- php实现室内地图导航,室内三维地图引擎功能
- 高等数学:第一章 函数与极限(6)极限存在准则、两个重要极限
- ie不支持includes_IE11 – 对象不支持属性或方法“includes” – javascript window.location.hash...
- 抓包软件charles
- 主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思
- P4643 [国家集训队]阿狸和桃子的游戏
- 标准蕃茄钟_12月开始设计项目:番茄钟
- Linux下安装firefox最新版
- 利用G25祖源计算器坐标画PCA散点图
- 安卓APP中启动微信小程序,闪一下无法打开问题
- Word笔记----wps插入的图片像素降低了怎么办?
- Unity 加密狗加密