网络编程知识预备(5) ——libcurl库安装及其编程访问百度首页(断点续传)

2023-10-31

本文为学习笔记,整合课程内容以及下列文章:

其中,libcurl函数库常用字段解读部分:

参考博文:原文地址
作者:冬冬他哥哥

Libcurl库简介

在linux下用c语言做HTTP的编程有一种方法是依赖于这个libcurl库,以后做跨平台网络协议相关的开发,第一个要想到的就是它。

libcurl是一个跨平台的网络协议库,支持http, https, ftp等协议,libcurl同样支持:

(1)HTTPS证书授权
(2)HTTP POST, HTTP PUT, FTP 上传
(3) HTTP基本表单上传,代理,cookies,和用户认证

库下载地址:库下载

在这里插入图片描述

然后发送到linux开发环境中。

Libcurl等三方库的通用编译方法

三方库使用前通读方法

解压下载的库

tar xvf curl-7.71.1.tar.bz2

进入文件夹

cd curl-7.71.1

对于这种开源的包,一定要学会它的使用:

先看README:

vi README

并没有发现一些特别有用的东西。

在这里插入图片描述


没关系,去看这个

docs文件夹很重要,一般是对README的补充

cd docs

不需要看太多,看类似于这个:前面README提到的相关的API手册

vi curl.1

也很难受,真提取不到什么信息。

嵌入式开发变得简单了是因为嵌入式经过十几二十年的发展有很多人对其进行解读,写了很多文章。

重点是看INSTALL文件

还是重点来看看docs下的INSTALL文件,库一定要学会安装才能使用。

在这里插入图片描述


卧槽,外国人在绕圈圈,大概看看INSTALL.md

在这里插入图片描述

可以看到./configure后面没有跟任何参数就是默认安装位置了,这里我们肯定要做配置,不配置都不知道文件安装到哪里去了

make就是编译的意思
make install就是把编译的结果拷贝到根的指定文件夹底下

关于帮助:
在这里插入图片描述不在原本默认的路径下安装说明:
在这里插入图片描述
配置是否支持https:
在这里插入图片描述
回到/curl-7.71.1目录下,configure --help看看

./configure --help

[注意]help前不用加空格,我加了反而显示不了帮助信息了。

可以看到上文所提及的安装路径配置:
在这里插入图片描述
也可以看到特别重要的交叉编译说明:
在这里插入图片描述

库的配置、编译、安装

(1)安装位置的更改:

配置为:$获取当前路径,编译的时候会自动生成_install文件夹,并且把编译生成的东西全部放入这个文件夹。

./configure --prefix=$PWD/_install

另外,这是针对于交叉编译的配置:编译后在树莓派上用
./configure --prefix=$PWD/_install --host=arm-linux
这样,在ubuntu中就会使用arm-gcc进行编译

如果上述操作直接在树莓派上进行,则不用再去额外配置交叉编译。工作中开发板往往没有编译工具,需要在上位机上进行编译,那么这里就要进行交叉编译配置。

(2)开始编译

make

(3)安装

make install

(4)预览

进入 /_install

我们用的是头文件

cd include

进入里面的这个

cd curl

这些都是要用到的头文件
在这里插入图片描述就像树莓派编译是要链接库一样

gcc a.c -lwiringPi -lpthread

用到这个库的时候,我们同样需要链接_install/lib里面的libcurl.so动态库 (.a是静态库)

头文件主要是宏定义、声明一些函数等,具体函数实现在动态库里面。

调用libcurl编程访问百度主页

_install里的内容结合一下示例代码来访问一下百度。

代码

#include <stdio.h>
#include <curl/curl.h>

typedef unsigned int bool;//数据类型别名用typedef  有分号
#define true 1            //宏定义(替换)用define         无冒号
#define false 0

bool getUrl(char *filename)//GET请求
{
        CURL *curl;
        CURLcode res;
        FILE *fp;
        if ((fp = fopen(filename, "w")) == NULL)  // 返回结果用文件存储
                return false;
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Accept: Agent-007");
        curl = curl_easy_init();    // 初始化
        if (curl)
        {
                //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头
                curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp>指向的文件,
                //即为filename文件,而主函数传入的参数是 /tmp/get.html,即为真正保存在get.html文件中
                
                curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
                res = curl_easy_perform(curl);   // 执行
                if (res != 0) {

                        curl_slist_free_all(headers);  //释放句柄
                        curl_easy_cleanup(curl);
                }
                fclose(fp);
                return true;
        }
}
bool postUrl(char *filename)//POST请求
{
        CURL *curl;
        CURLcode res;
        FILE *fp;
        if ((fp = fopen(filename, "w")) == NULL)
                return false;
        curl = curl_easy_init();
        if (curl)
        {
                curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86");    // 指定post内容:用户信息 字段之间&连接,尝试登陆新浪邮箱
                //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");
                curl_easy_setopt(curl, CURLOPT_URL, " http://mail.sina.com.cn/cgi-bin/login.cgi ");   // 指定url
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
                res = curl_easy_perform(curl);//执行
                curl_easy_cleanup(curl);
        }
        fclose(fp);
        return true;
}
int main(void)
{
        getUrl("/tmp/get.html");
        postUrl("/tmp/post.html");
}

为什么要有最开始的那三句代码呢?
类似于bool,true,faluse,这是C99标准才会支持,C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型,为了修改方便直接这样替换。

编译注意(编译时链接库、头文件路径,运行需添加动态库为环境变量)

链接库和头文件再编译,同时注意指明他们的路径

gcc getAndPost.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl

注意:动态库静态库的链接用-L,而头文件用-I

错误排查:

(1)提示找不到头文件#include <curl/curl.h>,说明没有指明头文件的路径

(2)如果只是使用-L是默认去usr/lib下去找的,会提示找不到库文件的路径cannot find -lcurl

(3)如果编译报错一堆函数不认识,函数是存在库里面的,说明没有链接库

usr/bin/ld: getAndPost.c:(.text+0x1a2): undefined reference to `curl_easy_init'
/usr/bin/ld: getAndPost.c:(.text+0x1d2): undefined reference to `curl_easy_setopt'
/usr/bin/ld: getAndPost.c:(.text+0x1f6): undefined reference to `curl_easy_setopt'
/usr/bin/ld: getAndPost.c:(.text+0x217): undefined reference to `curl_easy_setopt'
/usr/bin/ld: getAndPost.c:(.text+0x238): undefined reference to `curl_easy_setopt'
/usr/bin/ld: getAndPost.c:(.text+0x244): undefined reference to `curl_easy_perform'

可以看到已经生成了可执行文件./a.out

直接运行这个./a.out是会报错的(为什么我没有报错??可能是我用的Ubuntu20,老师是18.04??不,很有可能是因为我当时网络是断开的)

error while loading shared libraries: libcurl.so.4:cannot open shared object file:no such file or directory

原因是运行时要链接动态库,没有添加环境变量,忘记怎么添加咋办?面向百度,export lib path

export LD_LIBRARY_PATH=./curl-7.71.1/_install/lib/

成功运行后,可以看到vi /tmp/get.html中已经有了百度官网的代码。(仅贴出部分)

在这里插入图片描述


这跟我们平常去访问百度是一样的,只是用了前端css去排版的比较好看罢了,当你右键查看页面源码就知道了。

vi /tmp/port.html里面不会有东西,因为访问失败了:新浪的用户和密码不匹配。

libcurl函数库常用字段解读

1.curl_global_init():初始化libcurl

函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用)

如果这个函数在curl_easy_init函数调用时还没调用,它将由libcurl库自动调用,所以多线程下最好主动调用该函数以防止在线程中curl_easy_init时多次调用。

注意:虽然libcurl是线程安全的,但curl_global_init是不能保证线程安全的,所以不要在每个线程中都调用curl_global_init,应该将该函数的调用放在主线程中。

参数:flags

CURL_GLOBAL_ALL               //初始化所有的可能的调用。(最常用)
CURL_GLOBAL_SSL              //初始化支持 安全套接字层。
CURL_GLOBAL_WIN32            //初始化win32套接字库。
CURL_GLOBAL_NOTHING         //没有额外的初始化。

2.curl_easy_init():拿到句柄

用来初始化一个CURL的指针(有些像返回FILE类型的指针一样)。相应的在调用结束时要用curl_easy_cleanup函数清理。

一般curl_easy_init意味着一个会话的开始. 它会返回一个easy_handle(CURL*对象), 一般都用在easy系列的函数中。

后续所有的操作都是对这个指针进行设置,把这种类型的指针就叫做句柄,实例:

在这里插入图片描述

其实socket服务器再socket函数后生成的fd,后续的bind,accept等操作也是基于这个fd,也可以理解为句柄

3.curl_easy_setopt(CURL *handle, CURLoption option, parameter):设置传输选项

参数:1)CURL类型的指针
(2)CURLoption类型的选项.(都在curl.h库里有定义,man 也可以查看到)3)parameter 既可以是个函数的指针,也可以是某个对象的指针,也可以是个long型的变量,取决于第二个参数。

根据设置的传输选项,实现回调函数以完成用户特定任务(设置与操作句柄)

这个函数很重要,几乎所有的curl 程序都要频繁的使用它。它告诉curl库,程序将有如何的行为,比如要查看一个网页的html代码等。(这个函数有些像ioctl函数)

第二个参数CURLoption常用的宏:

  • (1)CURLOPT_URL: 设置访问URL,就是设置访问的网址
  • (2)CURLOPT_POSTFIELDS

post请求中:以&拼接字符串的形式把参数链接起来,下篇文章提到的翔云人工智能平台OCRkey和密码就要放在这里传输。

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86");    // 指定post内容:用户信息,尝试登陆新浪邮箱
  • (3)CURLOPT_WRITEFUNCTION,CURLOPT_WRITEDATA

CURLOPT_WRITEFUNCTION使用举例:

回调函数:网页有数据请求回来的时候,如何去处理这些数据。(做人脸识别,肯定要获得人脸识别的结果)

设置的回调函数格式要求为:
size_t function( void *ptr, size_t size, size_t nmemb, void *stream);

函数将在libcurl接收到数据后被调用,因此函数多做数据保存的功能,如处理下载文件。

①陈老师的车牌识别车牌识别

int BufferWriterFunc(char* data,size_t size,size_t nmemb,char *buffer)
{
	strcpy(bufferData,data);//把返回的data数据放在本地的bufferData数组中
	return size*nmemb;
}

//配置如下:
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,BufferWriterFunc);

②修改上面访问百度的代码

size_t readData(void *ptr, size_t size, size_t nmemb, void *stream)
{
	char buf[1024] = {'\0'};
	strncpy(buf,ptr,1024);
	printf("===========get data ===========\n");
	printf("%s\n",buf);
}

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,readData);
CURLOPT_WRITEDATA使用举例

也可以通过 CURLOPT_WRITEDATA属性给默认回调函数传递一个已经打开的文件指针,用于将数据输出到文件里。

正如上面访问百度的例子:

FILE *fp;
if ((fp = fopen(filename, "w")) == NULL)//提前打开了一个文件流
        return false;

curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);//请求回来的所有数据都放到文件中

4.curl_easy_perform():执行任务

在初始化CURL类型的指针 以及curl_easy_setopt完成后调用. 就像字面的意思所说perform就像是个舞台.让我们设置的option 运作起来。

5.curl_easy_cleanup():释放内存

结束libcurl使用的时候,用来对curl_global_init做的工作清理。类似于close的函数。

该死的a库不好用

./a.out: /usr/lib/arm-linux-gnueabihf/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by ./curl-7.71.1/_install/lib/libcurl.so.4)

libcurl函实现断点下载与断点上传

https://www.cnblogs.com/chang290/archive/2012/08/12/2634858.html

libcurl实现断点续传

往期文章

网络编程知识预备(1) ——了解OSI网络模型
网络编程知识预备(2) ——浅显易懂的三次握手与四次挥手
网络编程知识预备(3) ——SOCKET、TCP、HTTP之间的区别与联系
网络编程知识预备(4) ——了解HTTP协议与HTTPS协议
网络编程知识预备(5) ——libcurl库安装及其编程访问百度首页

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络编程知识预备(5) ——libcurl库安装及其编程访问百度首页(断点续传) 的相关文章

  • 如何在android网络库(ION)中使用自签名SSL?

    使用此网络库 https github com koush ion https github com koush ion 由于当前状态是开发 我想使用自签名 SSL 证书 图书馆论坛有一些讨论 https github com koush
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • fopen 不返回

    我在 C 程序中使用 fopen 以只读模式 r 打开文件 但就我而言 我观察到 fopen 调用没有返回 它不返回 NULL 或有效指针 执行在 fopen 调用时被阻止 文件补丁绝对正确 我已经验证过 并且不存在与权限相关的问题 任何人
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 注册期间现有电子邮件的 422 或 409 状态代码

    我正在构建 RESTful API 遇到了一种情况 在用户注册期间 如果电子邮件已存在 则在422 and 409哪个http响应代码有意义 我浏览过类似的one https stackoverflow com questions 9269
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • NPTL 和 POSIX 线程有什么区别?

    NPTL 和 POSIX 线程之间的基本区别是什么 这两者是如何演变的 POSIX 线程 pthread 不是一个实现 它是几个函数的 API 规范 纸上的标准 英文 其名称以pthread 以及定义在
  • 为什么我的 Github 托管网站响应 HTTP 302 而不是 200?

    我拥有该域名penkov id au http penkov id au 我主持一个blog http michael penkov id au blog 2014 01 02 reinventing the wheel html usin
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • 是否可以将请求标头添加到 CORS 预检请求中?

    我有一个从外部服务器 不是服务器 访问 API 的网站 为网站提供服务 通过简单的XmlHttpRequest 见下文 那个API 需要将用于访问服务的 API 密钥添加为请求标头 然而 正如这些CORS https developer m
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute

随机推荐

  • Promise详解

    1 基本概念 Promise是JS异步编程中的重要概念 异步抽象处理对象 是目前比较流行Javascript异步编程解决方案之一 2 Promise的三种状态 pending 对象初始化状态 fulfilled 当调用resolve 成功
  • 计算机管理找不到防火墙,win10系统防火墙服务找不到的具体方案

    win10系统使用久了 好多网友反馈说win10系统防火墙服务找不到的问题 非常不方便 有什么办法可以永久解决win10系统防火墙服务找不到的问题 面对win10系统防火墙服务找不到的图文步骤非常简单 只需要从电脑桌面找到计算机 然后鼠标指
  • Effective C++ 学习笔记 条款06 若不想使用编译器自动生成的函数,就应该明确拒绝

    如想阻止拷贝 但编译器为类声明了拷贝构造函数和拷贝赋值运算符 这样就不能达到目的了 你可以通过将拷贝构造函数和拷贝赋值运算符声明为private的来阻止拷贝 但类的成员函数和友元还是可以调用 此时将它们声明但不定义就行了 这样调用它的函数会
  • 通过href 从http跳转https失效问题 前端解决

    目前 浏览器定位的功能大多数浏览器为了安全需要https协议才可使用 这就需要站点支持https协议 尝试通过a标签跳转至a目录下的index html 发现href中目标地址是https xxx com a 浏览器跳转到https xxx
  • 攻防世界:WEB新手练习区

    题目 https adworld xctf org cn challenges problem set index id 25 rwNmOdr 1678625790128 view source 题目描述 X老师让小宁同学查看一个网页的源代
  • 开源阅读书源_安卓神器

    Hi 新朋友 记得点蓝字关注我们哟 阅读 大家好 我是小昊 今天在论坛看到有人提到这个软件 我才记起来要老早就应该给大家推荐这个软件的 首先这个软件是需要自己添加源的 不加是用不了的哟 如
  • Docker安装以及常用命令

    提示 以下内容均为学习过程中的个人笔记 有用自取 无用勿喷 如有错误欢迎指正 一 什么是docker Docker 是采用Linux Container 基于Golang语言 采用apache2 0开源协议存储于GitHub开源的容器管理引
  • 【网络是怎样连接的】—— TCP/IP 传输数据

    协议栈的工作原理 1 协议栈的内部结构 操作系统中的网络控制软件 协议栈 的内部如图所示 分为几个部分 分别承担不同的功能 这张图中的上下关系具有一定的规则 上面的部分会向下面的部分委派工作 下面的部分接受委派的工作并实际执行 图中最上面的
  • 解决APK签名问题the apk for your currently selected variant(app-release-unsigned.apk)is not signed.

    转载地址 https www cnblogs com galibujianbusana p 7694087 html
  • C语言面试题汇编

    1 局部变量能否和全局变量重名 答 能 局部会屏蔽全局 要用全局变量 需要使用 局部变量可以与全局变量同名 在函数内引用这个变量时 会用到同名的局部变量 而不会用到全局变量 对于有些编译器而言 在同一个函数内可以定义多个同名的局部变量 比如
  • spdlog用法

    转自 spdlog学习笔记 说明 所有内容翻译自spdlog的wiki 受英语水平所限 有所错误或失真在所难免 如果您有更好的建议 请在博文下留言 线程安全 spdlog 命名空间下的是线程安全的 当loggers在不同的线程同时执行时 下
  • Django框架之DRF序列化与反序列化

    概念 序列化 将Python对象转换为json字符串 反之json字符串反序列化为对象 使用drf序列化组件的步骤如下 1 在你的app中新建一个py文件 新建一个序列化的类 2 在类中写要序列化的字段 在视图中使用序列化的类 1 实例化出
  • 从控制台输入基本工资,并计算输出实领工资

    题目 编写程序 public class Test01 这是一个main方法 程序的入口 public static void main String args 键盘输入 Scanner input new Scanner System i
  • 苹果电脑适合python吗_m1的MacBook pro适合python开发吗?

    我的MacBook Air M1到手了 我自己常用的python包都装了 都是arm的版本 不是用Rosseta跑的 请参考 短暂使用还没有发现什么BUG 只不过numpy和tf相关的包是Apple提供的 opencv也不能直接pip或者c
  • svm实现二分类_支持向量机原理详解(三): 核函数与非线性SVM

    前文推导了 线性 SVM的对偶问题 见支持向量机原理详解 二 拉格朗日对偶函数 SVM的对偶问题 不过 线性SVM以超平面来划分两类数据 如果数据本身是非线性的 那么以超平面作为决策边界就显得不太适用了 通过引入核函数 可以使SVM适用于非
  • 防雷工程专业术语及雷电浪涌保护器名词解释

    1 雷电次数 当雷暴进行时 隆隆的雷声持续不断 若其间雷声的时间间隔小于15分钟时 不论雷声断续传播的时间有多长 均算作是一次雷暴 若其间雷声的停息时间在15分钟以上时 就把前后分作是两次雷暴 2 雷电小时 就是说在该天文小时内发生过雷暴
  • springboot+mybatis+druid+postgreSql案例

    springboot mybatis druid postgreSql mysql 示例 springboot mybatis druid postgreSql mysql 示例 简介 结构解析 代码剖析 entity层 Dao层 serv
  • Java-System、Math、BigInteger、BigDecimal常用类的使用

    Java System Math BigInteger BigDecimal常用类的使用 1 System类 System类代表系统 系统级的很多属性和控制方法都放置在该类的内部 该类位于java lang包 由于该类的构造器是privat
  • 解决Linux7 ping出现 未知的名称或服务 错误

    问题描述 Linux7在利用命令nmtui进入图形化界面配置Linux的网络后为测试是否成功联网 ping配置的IP成功但ping如www baidu com常见网站时出现 gt ping www baidu com 未知的名称或服务 解决
  • 网络编程知识预备(5) ——libcurl库安装及其编程访问百度首页(断点续传)

    本文为学习笔记 整合课程内容以及下列文章 其中 libcurl函数库常用字段解读部分 参考博文 原文地址 作者 冬冬他哥哥 目录 Libcurl库简介 Libcurl等三方库的通用编译方法 三方库使用前通读方法 库的配置 编译 安装 调用l