首页 > 系统相关 >c++ linux download file via libcurl

c++ linux download file via libcurl

时间:2023-05-25 11:01:15浏览次数:36  
标签:std count via chrono libcurl c++ include time now

1.Install libcurl

sudo apt install curl

curl -o cpplibrary.pdf http://www.cesarkallas.net/arquivos/livros/informatica/cpp/The%20C%2B%2B%20Standard%20Library.pdf

 

2.

 #include <chrono> 
#include <ctime>
#include <curl/curl.h>
#include <curl/easy.h> 
#include <iostream> 
#include <iomanip>
#include <stdio.h>  

std::string get_time_now(bool is_exact = false)
{
    std::chrono::time_point<std::chrono::high_resolution_clock> now = std::chrono::high_resolution_clock::now();
    time_t raw_time = std::chrono::high_resolution_clock::to_time_t(now);
    struct tm tm_info = *localtime(&raw_time);
    std::stringstream ss;
    ss << std::put_time(&tm_info, "%Y%m%d%H%M%S");
    if (is_exact)
    {
        std::chrono::seconds seconds = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch());
        std::chrono::milliseconds mills = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());
        std::chrono::microseconds micros = std::chrono::duration_cast<std::chrono::microseconds>(now.time_since_epoch());
        std::chrono::nanoseconds nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch());
        std::uint64_t mills_count = mills.count() - seconds.count() * 1000;
        std::uint64_t micros_count = micros.count() - mills.count() * 1000;
        std::uint64_t nanos_count = nanos.count() - micros.count() * 1000;
        ss << "-" << std::setw(3) << std::setfill('0') << std::to_string(mills_count)
           << std::setw(3) << std::setfill('0') << std::to_string(micros_count)
           << std::setw(3) << std::setfill('0') << std::to_string(nanos_count);
    }

    return ss.str();
}
 
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

void download_file()
{
    std::cout<<get_time_now(true)<<",start in "<<__FUNCTION__<<std::endl;
    CURL *curl;
    FILE *fp;
    CURLcode res;
    char *url = "https://www.mica.edu.vn/perso/Vu-Hai/EE3490/Ref/The%20C++Standard%20Library%20-%202nd%20Edition.pdf";
    char outfilename[FILENAME_MAX] = "/home/fred/C/aaaaa.pdf";
    curl = curl_easy_init();
    if (curl)
    {
        fp = fopen(outfilename, "wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);
        fclose(fp);
    }
    std::cout<<get_time_now(true)<<",finish in "<<__FUNCTION__<<std::endl;
}

int main(void)
{
    download_file();
    return 0;
}

3.

g++ -std=c++2a -I. *.cpp -o h1 -luuid -lpthread -lcurl

 

4.

./h1

 

标签:std,count,via,chrono,libcurl,c++,include,time,now
From: https://www.cnblogs.com/Fred1987/p/17430499.html

相关文章

  • C++中const和constexpr关键字解析:常量、函数和指针
    C++中const和constexpr的作用很多C++的初学者看到const这个关键字的第一反应都是一头雾水,主要是因为const可以出现在很多的位置,以及后面加入的constexpr更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用const关键字const修饰变量这是最基本的一种用法,顾名思义,就是......
  • C++之constexpr详解
    constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化:constexprintmf=20;//20是常量表达式constexprintlimit=mf+1;//mf+1是常量表达式constexprintsz=size();//之后......
  • C++11 constexpr:验证是否为常量表达式(长篇神文)
    constexpr是C++11标准新引入的关键字,不过在讲解其具体用法和功能之前,读者需要先搞清楚C++常量表达式的含义。 所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值......
  • CMake入门教程:从零开始构建C/C++项目
    CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,包括*C++、C、Python、Java*等。本文将从零开始,介绍如何使用CMake构建一个简单的C/C++项目安装CMake首先,需要下载并安装CMake。可以从CMake官网下载。如果404NotFound,可以试一下这个国内镜像网址下载地址。创......
  • C++拷贝控制技术
    模板特例如何写忘了拷贝noexcept 如果可以确认不会抛出异常,交换两个指针就行了swap是命名空间里的某个,更改的时候需要加上该命名空间 特例函数怎么写,就这样。inline的位置值得注意"=”运算符重载 两种拷贝一致 不可拷贝的方式编译器会想方设法为我们......
  • c++打卡练习(38)
    求一个范围内的所有素数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ intstart,end,i,j,m=0; cout<<"给定你所要求的素数的范围:"<<endl; cin>>start; cin>>end; cout<<start<<"到"<<end<<"之......
  • CMake入门教程:从零开始构建C/C++项目
    CMake是一个跨平台的自动化构建工具,可以用于构建各种类型的项目,包括C++、C、Python、Java等。本文将从零开始,介绍如何使用CMake构建一个简单的C/C++项目安装CMake首先,需要下载并安装CMake。可以从CMake官网下载。如果404NotFound,可以试一下这个国内镜像网址下载地址。创......
  • 深入浅出 C++ 11 右值引用
    彻底搞清楚:右值引用/移动语义/拷贝省略/通用引用/完美转发——以最短的篇幅,介绍常见误解(什么时候要用move?什么时候不能move?为什么move失败?)和基础知识(为什么右值引用变量是左值?为什么会调用移动构造函数?),一步步解释“为什么/是什么/怎么做”。写在前面如果你还不知道C++11......
  • C++右值引用
    右值引用应该是C++11引入的一个非常重要的技术,因为它是移动语义(Movesemantics)与完美转发(Perfectforwarding)的基石:移动语义:将内存的所有权从一个对象转移到另外一个对象,高效的移动用来替换效率低下的复制,对象的移动语义需要实现移动构造函数(moveconstructor)和移动赋值运算符(mo......
  • 各个版本Microsoft Visual C++官方下载链接
     MicrosoftVisualC++2005MicrosoftVisualC++2005RedistributablePackage(32位)http://download.microsoft.com/download/8/B/4/8B42259F-5D70-43F4-AC2E-4B208FD8D66A/vcredist_x86.exeMicrosoftVisualC++2005RedistributablePackage(64位)http://download.......