linux上使用curl下载指定url地址的文件,要有下载进度,用c语言
时间: 2024-09-24 19:11:51 浏览: 68
在Linux上使用C语言通过`libcurl`库下载指定URL地址的文件,并显示下载进度,可以参考以下步骤:
首先,需要安装`libcurl`库。在大多数Linux发行版中,你可以使用包管理器来安装,例如在Ubuntu上用`apt-get install libcurl4-openssl-dev`。
然后,在C代码中,你需要包含`curl/curl.h`头文件并链接`libcurl`库。以下是一个简单的示例程序:
```c
#include <stdio.h>
#include <curl/curl.h>
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
size_t written = fwrite(ptr, size, nmemb, stream);
// 更新进度信息,这里假设每字节都计算一次进度
printf("Downloaded %zu bytes.\r", written);
return written;
}
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <file_url>\n", argv[0]);
return -1;
}
CURL *curl;
FILE *fp;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT); // 初始化CURL
fp = fopen("output_file.txt", "wb"); // 打开本地文件准备接收数据
if (!fp) {
perror("Failed to open output file");
return -1;
}
curl = curl_easy_init(); // 创建CURL会话
if (!curl) {
perror("Failed to initialize curl");
fclose(fp);
return -1;
}
// 设置选项
curl_easy_setopt(curl, CURLOPT_URL, argv[1]); // 指定URL
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); // 使用自定义函数处理数据
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); // 将数据写入到本地文件
// 开始下载
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "Error downloading: %s\n", curl_easy_strerror(res));
fclose(fp);
curl_easy_cleanup(curl);
return -1;
}
curl_easy_cleanup(curl); // 清理CURL资源
fclose(fp);
curl_global_cleanup(); // 关闭CURL全局环境
printf("\nDownload completed.\n");
return 0;
}
```
运行这个程序时,需要提供一个URL作为命令行参数,它将开始下载并将进度实时打印到终端。注意,实际的下载进度可能不是精确的字节计数,因为网络传输可能会有缓冲。
阅读全文