当前位置: 首页 > news >正文

curl简介与libcurl开源库的使用总结

curl工具和libcurl不是同一个东西,二者的关系主要体现在以下方面:

定义与性质

curl工具:

是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持多种协议,如HTTP、HTTPS、FTP、FTPS等,可用于文件上传、下载以及处理cookies、跟踪重定向、执行身份验证等操作。

libcurl库:

是一个广泛使用的、支持多种协议的、开源的客户端URL传输库。它提供了许多用于数据传输的API,例如文件传输、FTP、HTTP、HTTPS、SMTP等,方便开发者在不同的场景下使用。

功能与用途

curl工具:

主要用于在命令行中直接执行各种网络请求和数据传输任务。用户可以通过输入特定的命令和参数,快速地实现与服务器的交互,如发送HTTP请求获取网页内容、上传文件到FTP服务器等。它适用于简单的网络操作和临时性的数据传输需求,常用于测试网络连接、调试API接口等。

libcurl库:

主要应用于程序开发中,为开发者提供了一个强大的网络通信接口。通过调用libcurl提供的函数和API,开发者可以在自己的应用程序中实现复杂的网络功能,如构建自定义的网络客户端、实现自动化的文件下载和上传、进行多线程或异步的网络请求等。它可以与各种编程语言结合使用,如C、C++、Python、PHP等,为不同语言的开发者提供了便利。

使用方式

curl工具:

通过在命令行中输入相应的命令和参数来使用,无需编写代码。例如,使用curl -O http://example.com/file.zip命令可以下载指定URL的文件;使用curl -u username:password -T file.zip ftp://ftp.example.com/命令可以通过FTP上传文件。

libcurl库:

需要在编程环境中使用相应的编程语言调用其API函数。以C语言为例,需要包含libcurl的头文件,然后初始化libcurl库、设置相关选项、执行请求并处理响应结果等。

综上所述,curl工具和libcurl虽然都与网络数据传输相关,但它们在定义、功能和使用方式上存在明显的区别。curl工具是直接在命令行中使用的工具,而libcurl库则是供开发者在程序中调用的库函数集合,两者相辅相成,共同为用户提供了强大的网络功能支持。

curl工具通常就是一个基于libcurl的可执行文件,但是libcurl是源码。

cURL简介

主要参考:

curl工具的入门级使用-CSDN博客

cURL是常用的命令行工具, 它的名字就是客户端(client)的 URL 工具的意思。1997年首次发行。

cURL是一个利用URL语法在命令行方式下工作的开源文件传输工具,也是一个跨平台的库(libcurl), cURL编程用于需要通过Internet协议发送或接收数据的几乎任何地方。它支持几乎所有的互联网协议(DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,MQTT,POP3,POP3S,RTMP,RTMPS,RTSP,SCP,SFTP,SMB,SMBS,SMTP ,SMTPS,TELNET和TFTP)。此外,cURL还支持各种选项和参数,如代理支持、文件断点续传、带宽限制、SSL连接等。这些功能使得cURL成为一个灵活和强大的工具,广泛应用于网络开发和系统管理中。

在Windows下安装使用cURL

下载cURL安装包:可以从cURL官网(curl - Download) 下载Windows版本的cURL安装包。根据个人电脑系统位数(32位或64位)选择相应的安装包进行下载。在个人电脑中,curl已经是内置工具了,无需下载安装。在任意位置打开CMD,输入命令curl --help回车,如果出现curl help信息,说明Curl能够运行,比如:

关于在Windows下安装使用cURL,我们就了解这么多,重点关注Linux下的使用。

ubuntu安装和使用curl工具

在Ubuntu上安装curl工具是一个简单的过程。curl是一个非常有用的命令行工具,用于传输数据,支持多种协议,包括HTTP、HTTPS、FTP等。以下是如何在Ubuntu上安装curl的步骤:

sudo apt update
sudo apt install curl

系统可能会要求你确认安装。当提示时,输入Y然后按Enter键继续。

安装完成后,你可以通过运行以下命令来验证curl是否成功安装:

curl --version

如果curl已成功安装,该命令将显示curl的版本信息。

这就是在Ubuntu上安装curl的全部步骤。现在,你可以开始使用curl来下载文件、测试网站的响应或进行其他网络请求了。

curl命令的简单使用

linux下使用curl来访问百度

在 Linux 下使用 curl 访问百度非常简单。curl 是一个强大的命令行工具,用于与各种协议进行数据传输,包括 HTTP、HTTPS、FTP 等。以下是如何使用 curl 来访问百度的步骤:

在终端中,输入以下命令来使用 curl 访问百度的首页:

curl https://www.baidu.com

这个命令告诉 curl 使用 HTTPS 协议去请求百度的服务器,并获取其首页的 HTML 内容。

按下回车键后,curl 会开始执行请求。如果一切正常,你将在终端中看到百度首页的 HTML 源代码。这些代码是由百度服务器返回的,显示了百度首页的内容。

如果你想要将输出保存到文件中,可以使用重定向操作符 >。例如,将百度首页的 HTML 内容保存到名为 baidu.html 的文件中:

curl https://www.baidu.com > baidu.html

这样,百度首页的 HTML 内容就会被保存到你当前目录下的 baidu.html 文件中,你可以使用任何文本编辑器打开它进行查看。

如果遇到网络问题或服务器无法访问的情况,curl 会显示错误信息。确保你的网络连接正常,并且目标 URL 是正确的。

其余选项的使用可以使用curl --help或man curl查看帮助信息,每个选项都有详细的说明。

curl命令能为之后curl库的使用提供参考基础,建议在进行curl代码编写前先使用curl命令实现,有些时候的bug不是代码造成的,有可能本身curl就无法建立连接。

libcurl开源库的编译与使用

主要参考:

libcurl开源库的编译与使用全攻略_libcurl编译-CSDN博客

libcurl简介

libcurl 是一个广泛使用的、支持多种协议的、开源的客户端URL传输库,提供了许多用于数据传输的API,例如文件传输、FTP、HTTP、HTTPS、SMTP等。

libcurl 的主要特点包括

支持多种协议:libcurl 支持多种协议,如 HTTP、FTP、SMTP 等,方便开发者在不同的场景下使用。

易于使用:libcurl 的 API 设计简洁,易于使用,方便开发者快速开发出网络通信功能。

可移植性强:libcurl 支持多种操作系统,如 Linux、Windows、MacOS 等,方便开发者在不同的平台上使用。

可定制性强:libcurl 支持插件机制,开发者可以根据自己的需求定制不同的插件,实现不同的功能。

高效稳定:libcurl 在数据传输过程中采用了多种优化技术,保证了数据传输的高效性和稳定性。

总的来说,libcurl 是一个功能强大、易于使用、可移植性强、可定制性强、高效稳定的网络通信库,被广泛应用于各种软件开发中。

本文章主要介绍libcurl在linux平台下的编译步骤,并介绍了libcurl相关的API接口,最后通过一个demo演示如何通过libcurl发送http请求。

libcurl主要使用C语言编写。

从其官方文档来看,在介绍如何使用libcurl时,使用的示例代码均为C语言。并且,libcurl的开发者在开发过程中也是以C语言为基础进行编写和实现的,以确保其在各种操作系统和环境下的高效运行和稳定性。

官方文档

libcurl - API

libcurl相关包下载

libcurl发行版本路径

Releases · curl/curl · GitHub

linux平台下载tar.gz包。以7.85.0版本为例,下载curl-7.85.0.tar.gz 包。

openssl发行版本 :使用libcurl一般都需要依赖openssl库

Releases · openssl/openssl · GitHub

openssl发行版本只有tar.gz包,windows/linux平台都使用这个包即可。以1.1.1u版本为例,下载 openssl-1.1.1u.tar.gz 包

linux平台libcurl库编译

由于需要依赖openssl,先编译openssl库

openssl编译

解压openssl压缩包后进入解压后的目录

分别执行以下命令

./config --prefix=${PWD}/_install
sudo make
sudo make install

编译安装完成后,openssl相关库和头文件都会释放到 _install 目录下

libcurl编译

解压libcurl压缩包后进入解压后的目录

分别执行以下命令

./configure --prefix=${PWD}/_install --with-openssl=${PWD}/../openssl-1.1.1u/_install
sudo make
sudo make install

–prefix 指定的是安装目录,如果不指定会默认安装到系统目录下。–with-openssl 指定的是openssl相关库目录。

编译安装完成后,相关库和头文件会释放到_install目录下

相关接口

CURLcode curl_global_init(long flags)

描述:初始化libcurl,只能调用一次,且在其他函数之前调用
参数
flags
CURL_GLOBAL_ALL : 初始化所有的可能的调用。
CURL_GLOBAL_SSL : 初始化支持 安全套接字层。
CURL_GLOBAL_WIN32 : 初始化win32套接字库。
CURL_GLOBAL_NOTHING : 没有额外的初始化
返回值 : 返回 CURLE_OK 为成功,返回其他值失败
CURL *curl_easy_init(void)

描述:初始化一个CURL类型的指针,要在 curl_easy_cleanup 中进行释放。
返回值: 返回一个 CURL 类型指针,在 curl_easy_setopt 函数中使用
CURLcode curl_easy_setopt(CURL *curl, CURLoption option, …);

描述:设置选项
参数
curl : curl_easy_init 返回的 CURL类型指针
option :curl_easy_setopt函数option参数介绍
返回值 : 返回 CURLE_OK 为成功,返回其他值失败
CURLcode curl_easy_perform(CURL *curl)

描述:以阻塞方式执行请求
参数:
curl :curl_easy_init 返回的 CURL类型指针
返回值:返回 CURLE_OK 为成功,返回其他值失败
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, …)

描述:请求curl 会话中的相关信息
参数
curl :curl_easy_init 返回的 CURL类型指针
info
CURLINFO_RESPONSE_CODE :获取http状态码
其他参数描述
返回值:返回 CURLE_OK 为成功,返回其他值失败
void curl_easy_reset(CURL *curl)

描述:重新初始化CURL指针为默认值
void curl_easy_cleanup(CURL *curl)

描述:清理 curl_easy_init 接口申请的 CURL 类型指针
curl_easy_setopt函数option参数介绍

CURLOPT_URL :设置要访问的URl
CURLOPT_WRITEFUNCTION :设置回调函数,回调函数在libcurl接收到数据后被调用
回调函数原型:size_t function(void *ptr, size_t size, size_t nmemb, void *stream);
CURLOPT_WRITEDATA :用于表明 CURLOPT_WRITEFUNCTION 函数中的stream指针的来源
CURLOPT_HEADERFUNCTION :设置回调函数,回调函数在libcurl接收到http响应头后被调用
回调函数原型 : size_t function( void *ptr, size_t size,size_t nmemb, void *stream);
CURLOPT_HEADERDATA : 表明CURLOPT_HEADERFUNCTION 函数的stream指针的来源。
CURLOPT_TIMEOUT :设置数据传输超时时间
CURLOPT_CONNECTIONTIMEOUT :设置连接超时时间
CURLOPT_POST :设置请求方式为post
CURLOPT_POSTFIELDS : 设置post请求体
CURLOPT_POSTFIELDSIZE :设置post请求大小
CURLOPT_HTTPHEADER : 设置http请求头
CURLOPT_SSL_VERIFYPEER :设置是否验证对端证书,设置为0表示不验证。默认为1,表示验证。
CURLOPT_SSL_VERIFYHOST :设置是都验证服务器证书,设置为0表示不验证。
其他参数

演示代码

  #include <stdio.h>#include <stdlib.h>#include <string.h>#include <curl/curl.h>#include <iostream>typedef struct {std::string body;size_t bodySize;} stResponse;typedef struct {std::string header;size_t headerSize;} stResponseHeader;size_t responseBodyCallback(void *ptr, size_t size, size_t nmemb, void *stream) {stResponse* pResponse = (stResponse*)stream;pResponse->body.append((char*)ptr, size * nmemb);pResponse->bodySize = size * nmemb;return size * nmemb;}size_t responseHeaderCallback(void *ptr, size_t size, size_t nmemb, void *stream){stResponseHeader* pResponseHeader = (stResponseHeader*)stream;pResponseHeader->header.append((char*)ptr, size * nmemb);pResponseHeader->headerSize = size * nmemb;return size * nmemb;}int main(){std::string readBuffer;stResponse response;stResponseHeader responseHeader;// 初始化所有可能的调用curl_global_init(CURL_GLOBAL_ALL);CURL *curl = curl_easy_init();// 设置urlcurl_easy_setopt(curl, CURLOPT_URL, "http://182.92.205.179:10088");// 设置post请求,不设置或设置为0则为get请求curl_easy_setopt(curl, CURLOPT_POST, 1);// 设置post请求体char postData[1024] = "{\"req\":\"hello\"}";curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData);// 设置post请求体大小curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(postData));// 设置http请求头curl_slist* headerList = NULL;headerList = curl_slist_append(headerList, "Content-Type: application/json");headerList = curl_slist_append(headerList, "flag: libcurl");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerList);// 设置不校验证书,https请求时使用curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);// 设置回调函数获取响应体数据curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, responseBodyCallback);curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&response);// 设置回调函数获取响应头数据curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, responseHeaderCallback);curl_easy_setopt(curl, CURLOPT_HEADERDATA, (void*)&responseHeader);// 超时时间curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5);// 执行请求CURLcode res = curl_easy_perform(curl);// 检查错误if(res == CURLE_OK){// 获取状态码int responseCode = 0;curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &responseCode);std::cout << "code : "<<responseCode << std::endl;std::cout << "responseHeader size : "<<responseHeader.headerSize << std::endl;std::cout << "responseHeader header : "<<responseHeader.header.c_str() << std::endl;std::cout << "response size : "<<response.bodySize << std::endl;std::cout << "response body : "<<response.body.c_str() << std::endl;}else{std::cout<<curl_easy_strerror(res)<<std::endl;}curl_slist_free_all(headerList);// 清理curl_easy_cleanup(curl);return 0;}

参考文档

  • 官方API文档

相关文章:

curl简介与libcurl开源库的使用总结

curl工具和libcurl不是同一个东西&#xff0c;二者的关系主要体现在以下方面&#xff1a; 定义与性质 curl工具&#xff1a; 是一个利用URL语法在命令行下工作的文件传输工具&#xff0c;1997年首次发行。它支持多种协议&#xff0c;如HTTP、HTTPS、FTP、FTPS等&#xff0c;可用…...

Win10系统部署RabbitMQ Server

文章目录 版本说明依赖安装添加Erlang环境变量验证Erlang安装 RabbitMQ Server安装解压启动查看RabbitMQ插件安装rabbitmq_management插件再次启动设置RabbitMQ为系统服务 版本说明 ErlangRabbitMQ27.24.0.5 可以在Erlang官网和RabbitMQ官网下载安装包&#xff0c;安装已下载…...

uniapp APP端页面触发调用webview(页面为uniapp开发的H5)里的方法

原理&#xff1a; 使用 getCurrentInstance() 获取当前组件的 Vue 实例&#xff0c;通过 instance.proxy.$scope.$getAppWebview() 获取 Uniapp 的原生 WebView 对象。 使用 WebView 提供的 evalJS 方法&#xff0c;执行嵌入 H5 页面内的 JavaScript 代码 <template>&l…...

嵌入式知识点总结 C/C++ 专题提升(七)-位操作

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.位操作基础 2.如何求解整型数的二进制表示中1的个数 ? 3.如何求解二进制中0的个数 4.交换两个变量的值&#xff0c;不使用第三个变量。即a3,b5,交换之后a5,b3: 5.给定一个…...

新星杯-ESP32智能硬件开发--ESP32的I/O组成

本博文内容导读&#x1f4d5;&#x1f389;&#x1f525; ESP32系统的基础外设开发&#xff1a;IO_MUX和GPIO矩阵 IO_MUX和GPIO矩阵 ESP32的I/O组成了与外部世界交互的基础&#xff0c;ESP32芯片有34个物理GPIO引脚。每个引脚都可用作一个通用I/O&#xff0c;或者连接一个内部…...

航空航天混合动力(7)航空航天分布式电推进系统

航空航天分布式电推进系统 1.概述2.分布式电推进系统组成3.关键技术4.分布式电推进系统优势5.国内外研究情况5.1 国外5.2 国内6.分布式电推进系统应用场景6.1 航空领域6.2 航天领域tips:资料来自网上,仅供参考学习使用 1.概述 分布式推进系统是指飞行器推力由位于整个航空器…...

AIGC视频生成明星——Emu Video模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Meta的视频生成模型Emu Video&#xff0c;作为Meta发布的第二款视频生成模型&#xff0c;在视频生成领域发挥关键作用。 &#x1f33a;优质专栏回顾&am…...

Cyber Security 101-Security Solutions-Firewall Fundamentals(防火墙基础)

了解防火墙并亲身体验 Windows 和 Linux 内置防火墙。 任务1&#xff1a;防火墙的用途是什么 我们看到商场、银行、 餐馆和房屋。这些警卫被安置在 这些区域用于检查进出人员。这 维护此检查的目的是确保没有人在没有 被允许。这个警卫充当了他所在区域和访客之间的一堵墙。 …...

备赛蓝桥杯之第十五届职业院校组省赛第一题:智能停车系统

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…...

Docker核心命令与Yocto项目的高效应用

随着软件开发逐渐向分布式和容器化方向演进&#xff0c;Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程&#xff0c;大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具&#xff0c;与 Docker 的结合进一步增强了开发…...

idea plugin插件开发——入门级教程(IntelliJ IDEA Plugin)

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;idea plugin插件开发——入门级教程&#xff08;IntelliJ IDEA Plugin&#xff09;-CSDN博客 目录 前言 官方 官方文档 代码示例 开发前必读 Intellij、Gradle、JDK 版本关系 plu…...

61,【1】BUUCTF WEB BUU XSS COURSE 11

进入靶场 左边是吐槽&#xff0c;右边是登录&#xff0c;先登录试试 admin 123456 admiin# 123456 admin"# 123456 不玩了&#xff0c;先去回顾下xss 回顾完就很尴尬了&#xff0c;我居然用SQL的知识去做xss的题 重来 吐槽这里有一个输入框&#xff0c;容易出现存储型…...

开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)

一些 Linux 基本概念 个人理解&#xff0c;并且为了便于理解&#xff0c;可能会存在一些问题&#xff0c;如果有根本上的错误希望大家及时指出 发行版 WSL 的系统是基于特定发行版的特定版本的 Linux 发行版 有固定组织维护的、开箱就能用的 Linux 发行版由固定的团队、社…...

Spring Boot MyBatis Plus 版本兼容问题(记录)

Spring Boot & MyBatis Plus 版本兼容问题&#xff08;Invalid value type for attribute factoryBeanObjectType: java.lang.String&#xff09; 问题描述问题排查1. 检查 MapperScan 的路径2. 项目中没有配置 FactoryBean3. 检查 Spring 和 MyBatis Plus 版本兼容性 解决…...

26. 【.NET 8 实战--孢子记账--从单体到微服务】--需求更新--用户注销、修改用户名、安全设置

在实际开发过程中&#xff0c;项目需求的变更和增加是常见的情况&#xff0c;因此这篇文章我们就模拟一下项目需求新增的情况。 一、需求 项目经理今天提出了新的功能&#xff0c;需要增加重置密码、安全设置、修改用户名、注销账户这四个功能&#xff0c;这四个功能必须是独…...

神经网络|(一)加权平均法,感知机和神经元

【1】引言 从这篇文章开始&#xff0c;将记述对神经网络知识的探索。相关文章都是学习过程中的感悟和理解&#xff0c;如有雷同或者南辕北辙的表述&#xff0c;请大家多多包涵。 【2】加权平均法 在数学课本和数理统计课本中&#xff0c;我们总会遇到求一组数据平均值的做法…...

OpenHarmony OTA升级参考资料记录

OpenHarmony 作为一个开源分布式操作系统,通过其强大的 OTA(Over-The-Air)升级能力,为开发者和厂商提供了一套灵活而安全的系统升级方案。 OTA升级方式 根据升级包的应用方式,OpenHarmony 的 OTA 升级可以分为两种:本地升级和网络OTA升级。 本地升级 本地升级是将已制作…...

在 Kubernetes 上快速安装 KubeSphere v4.1.2

目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…...

【回忆迷宫——处理方法+DFS】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 250; int g[N][N]; bool vis[N][N]; int dx[4] {0, 0, -1, 1}; int dy[4] {-1, 1, 0, 0}; int nx 999, ny 999, mx, my; int x 101, y 101; //0墙 (1空地 2远方) bool jud(int x, int y) {if…...

华为OD机试真题---战场索敌

华为OD机试真题“战场索敌”是一道考察算法和数据结构应用能力的题目。以下是对该题目的详细解析&#xff1a; 一、题目描述 有一个大小是NM的战场地图&#xff0c;被墙壁’#‘分隔成大小不同的区域。上下左右四个方向相邻的空地’.‘属于同一个区域&#xff0c;只有空地上可…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...