- 博客(85)
- 问答 (1)
- 收藏
- 关注
原创 docker load 后镜像名称为空的问题解决
加载 Docker 镜像后,镜像有时会显示名称为空。这通常是因为在打包镜像时使用了镜像 ID,而不是镜像名称。),解压后镜像可能没有名称,导致在加载时无法显示镜像名称。为避免镜像名称丢失,推荐在打包镜像时使用镜像的名称和标签。:在打包镜像时,如果使用镜像 ID 进行打包(例如。如果已经加载了镜像但没有名称,可以通过。为镜像添加名称和标签。
2024-08-09 14:33:46 1147
原创 netstat的使用方法
netstat 是一个在 Linux 系统中用来打印网络连接、路由表、接口统计等信息的工具。它可以帮助排查端口占用问题、监控网络连接状态以及识别使用特定端口的进程等。
2024-07-29 10:59:16 376
原创 查找子串方法总结
是 C++ 标准库中的一个算法,属于泛型编程的范畴。它能够在容器的任意范围内查找子序列。泛型编程的核心思想是编写代码,使其能够处理不同类型的容器和迭代器,而不依赖于具体的容器实现。是由标准库实现的,经过了优化,性能较好。实测效率高,推荐使用。
2024-07-15 18:04:43 545
原创 C++ 锁管理:std::lock_guard 和 std::unique_lock 使用方法
适用于简单的自动化锁定和解锁场景,功能有限但性能开销小。:适用于需要更复杂控制的场景,例如手动解锁、重新加锁及与条件变量配合使用,提供了更多的灵活性,但性能开销较大。
2024-07-05 17:09:46 696
原创 Docker在容器启动时自动执行特定脚本
如果在运行容器时指定了其他命令(例如 docker run + /bin/bash),这些命令会覆盖Dockerfile中的CMD设置。脚本执行完毕后,容器会立即退出。如果希望容器保持运行状态,可以在脚本的最后添加。执行脚本,以实现容器启动时执行特定脚本的目的。使用Dockerfile构建自定义镜像。在容器启动后,会自动执行指定的脚本。在Dockerfile中使用。在Dockerfile中,
2024-06-14 16:36:44 940
原创 Docker从容器打包镜像到本地保存与加载
确认要保存的镜像的名称或 ID。命令确认镜像是否成功加载到本地 Docker 环境中。文件,这个文件就是包含镜像数据的 tar 包。完成后,你可以在指定路径下找到。,你想将其保存到当前目录下的。例如,假设你有一个镜像名为。加载完成后,可以使用。
2024-06-14 14:26:31 1176
原创 网络通讯一些名词的概念整理
同一个网段通讯,不需要网关。与别的网段进行通讯时,首先要将数据发送网关,网关将数据封装后,向其他网段进行转发。有老化时间,没有通讯,一般5分钟后,删除存储的mac地址,从新记录。网桥工作在OSI参考模型的数据链路层(第二层),将两个LAN连起来,根据MAC地址来转发帧,可以看作一个“低层的路由器”(路由器工作在网络层,根据网络地址如IP地址进行转发)动态路由,是通过路由器在互相通讯时,通过路由协议,动态获取,填入路由表。信号在传输过程中有缩减,为了保证传输的质量,通常在100米左右,通过中继器增强信号。
2022-11-08 13:47:40 355 1
原创 SQLite3交叉编译
SQLite是一款轻量级的开源的嵌入式数据库,由D.RichardHipp在2000年发布。SQLite使用方便,性能出众,广泛应用于消费电子、医疗、工业控制、军事等各种领域。
2022-07-27 22:43:45 970
转载 C++ 左值和右值
C++中左值(lvalue)和右值(rvalue)是比较基础的概念,虽然平常几乎用不到,但C++11之后变得十分重要,它是理解 move/forward 等新语义的基础。左值和右值主要的区别之一是左值可以被修改,而右值不能。左值与右值这两个概念是从 C 中传承而来的。左值指既能够出现在等号左边,也能出现在等号右边的变量;右值则是只能出现在等号右边的变量。2. 左值引用和右值引用左值引用:引用一个对象;右值引用:就是必须绑定到右值的引用,C++11中右值引用可以实现“移动语义”,通过 && 获得右值引
2022-06-14 10:38:36 1004
原创 C++ 拷贝控制(五):阻止拷贝
有些类应该阻止拷贝,比如iostream类阻止了拷贝,以避免多个对象写入或者读取相同的IO缓存。如果我们不定义拷贝控制成员,但是编译器会默认为我们定义这些操作,因此不能阻止类的拷贝。通常阻止拷贝主要有定义删除函数和private拷贝控制两种方法。我们可以通过将拷贝构造函数和赋值拷贝运算符定义为删除函数来阻止拷贝。删除函数是一种函数,虽然我们定义了它们,但是不能以任何方式使用它们。特别注意:由于析构函数是public的,用户可以定义NoCopy类型的对象。但是由于拷贝构造函数和拷贝赋值运算符是privat
2022-06-09 15:33:50 2273 2
原创 C++ 拷贝控制(四):使用=default
可以通过将拷贝控制成员定义为 =default 来显示地要求编译器生成合成版本。特别注意:在类内使用=default修饰成员的声明时,合成的函数将隐式地声明为内联的(就像任何其他类内声明的成员函数一样)。如果不希望合成的成员时内联函数,应该只对成员的类外定义使用=default,就像上面拷贝赋值运算符随做的那样。...
2022-06-08 18:54:20 419
原创 C++ 拷贝控制(三):析构函数
析构函数执行与构造函数相反的操作:构造函数初始化对象的非static数据成员,还可能做一些其他的工作。析构函数释放对象使用的资源,并销毁非static数据成员。在一个析构函数中,不存在类似构造函数中,初始化列表的东西。来控制成员如何销毁,析构部分是隐式的。成员销毁时发生什么完全依赖于成员的类型。销毁的成员需要调用自己的析构函数销毁。内置类型没有析构函数,销毁内置类型什么也不需要做。注意:隐式销毁一个内置指针类型的成员不会delete它所指的对象。与普通指针不同,智能指针是类类型的,具有析构函数。智能指针成
2022-06-08 16:47:11 290
原创 C++ 拷贝控制(二):拷贝赋值运算符
与类控制其对象如何初始化一样,类也可以控制对象如何赋值:1. 重载赋值运算符重载运算符本质上是一个函数,由operator关键字后接要定义的运算符的符号组成。赋值运算符是由一个名为"operator="的函数。类似于其他任何函数,运算符函数也有一个返回类型和参数列表。为了与内置类型的赋值保持一致,赋值运算符通常返回一个指向其左侧运算对象的引用。标准库通常要求保存在容器中的类型要具有赋值运算符,且其返回值是左侧运算对象的引用与处理拷贝构造函数一样,如果一个未定义自己的拷贝赋值运算符,编译器会为它生成一个
2022-06-07 17:28:51 426
原创 C++ 拷贝控制(一):拷贝构造函数
拷贝控制,当定义一个类时,我们显式或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么。通过一下五种特殊的成员函数来控制这些操作:拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符、析构函数。如果我们没有定义这些拷贝控制成员,编译器会自动定义确实操作。因此很多类,忽略了这些拷贝控制操作。但是,有些类依赖这些操作默认的定义会导致意想不到的灾难。.........
2022-06-07 15:53:19 193
转载 C++ 内存分配(静态内存、栈和堆)
内存分为三种:静态内存、栈内存和堆内存1. 静态内存静态内存用来保存局部static对象、类的static数据成员、以及定义在任何函数之外的变量。保存对象:局部static对象void func(){ static int a; // 局部static对象}类的static数据成员class Function(){public: static void func(); // 类中static函数private: static int i_func; /
2022-04-27 18:03:20 1234 1
原创 C++ 字符串的截取
按照字符串截取/** * @brief 按照指定的字符串截取字符串 * @param str 需要截取的字符串 * @param pattern 按照该字符串截取 * @return 截取好的字符串vector */std::vector<std::string> splitStr(std::string str, std::string pattern){ std::string::size_type pos; std::vector<std.
2022-04-20 17:12:50 10777 1
原创 C++ 字节流指针(字符数组)与string类型的转换
字符数组换成string// 定义一个字符数组char a[4] = "asd";// 将字符数组换成字符串string result = string(a, a + sizeof(a));String转换成字符数组// 定义一个字符串string a = "asd";// 将String转换成字符数组char *result = const_cast<char*>(a.c_str());int length = a.size();...
2022-04-20 16:42:46 2246
原创 大小端及转换(C++)
1. 基本概念大小端表示数据在存储器中存放的顺序。大端模式: 数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;小端模式:数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。假如在一段内存中存储如下数据uint8_t A = 0xA1;uint8_t
2022-03-03 17:40:36 13876
原创 wgs84坐标转换,地图拾取wgs84坐标工具推荐
1. 地图坐标转换在线工具:https://tool.lu/coordinate/可以直接在地图上拾取点位,转换成WGS84,GCJ02或者BD09坐标。2. 手机app地图测量专家 + 地学大数据在线版:http://www.giscalculator.com/enter_geocode_input/地图测量专家拾取02坐标点位,再使用地学大数据在线版进行转换成wgs84坐标。实测比较准。注意:地图测量专家拾取点位可以批量拾取02点位(拾取84的好像只能单独看)。然后用地学大数据在线版批量转换成
2022-02-10 14:20:17 20389 1
原创 C++ string转换int型
使用sscanf()函数#include <iostream>int main(){ std::string test = "1,2,3,4"; int a , b; sscanf(test.c_str(), "%d,%d", &a,&b); std::cout <<"a: " << a << std::endl; std::cout <<"b: " << b <.
2022-02-08 15:43:21 748
原创 python 在同一行打印,print覆盖输出,
python 在同一行打印,print覆盖输出,print("\r",object,end="",flush=True) # object为需要打印的内容参考:https://blog.csdn.net/qq_35975447/article/details/88072657
2022-01-07 14:07:16 3545
原创 tcpdump的使用方法
tcpdump是Linux中强大的网络数据采集分析工具之一。tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。1. 常用的参数$ tcpdump # 默认情况下,直接启动tcpdump将监视第一个网络接口(非lo口)上所有流通的数据包。$ tcpdump -i eth1 # 【参数】-i,指定网卡,如eth0、eth1。 $
2021-12-16 11:20:15 7284
原创 CMake及交叉工具编译链的安装使用
CMake及交叉编译工具链的安装使用1. 原理CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库。交叉编译,是利用交叉编译工具链,在宿主机器执行编译、链接生成目标机(嵌入式arm)运行的程序或者共享库2. 测试环境宿主系统: ubantu18.04目标机: arm交叉编译
2021-12-05 20:31:03 4538
原创 C++ 再探智能指针(三):weak_ptr
基础概念阅读另一篇文章:C++ 智能指针 : https://blog.csdn.net/qq_28256407/article/details/119377508weak_ptr是一种不控制所指向对象生存周期的智能指针,它指向由一个shared_ptr管理的对象。将一个weak_ptr绑定到一个shared_ptr的对象不会改变其引用计数。当shared_ptr被销毁,即使有weak_ptr指向对象,对象还是会被释放。weak_ptr支持的操作weak_ptr<T> w /
2021-11-04 17:00:29 752
原创 C++ 再探智能指针(二):unique_ptr
基础概念阅读另一篇文章:C++ 智能指针 : https://blog.csdn.net/qq_28256407/article/details/119377508unique_ptr支持的操作p // 将p当做一个条件判断,若p指向一个对象则为true*p // 解引用p,获得指向它的对象、p->mem // 等价于 (*p).mem 访问成员p.get() // 返回p中保存的指针(指向对象的普通指针)。如果智能指针释放了其对象,返回的指针也会被释放swap(p
2021-11-03 21:49:19 300
原创 C++ 再探智能指针(一):shared_ptr
【基础参考】C++ 智能指针: https://blog.csdn.net/qq_28256407/article/details/119377508shared_ptr支持的操作p // 将p当做一个条件判断,若p指向一个对象则为true*p // 解引用p,获得指向它的对象、p->mem // 等价于 (*p).mem 访问成员p.get() // 返回p中保存的指针(指向对象的普通指针)。如果智能指针释放了其对象,返回的指针也会被释放swap(p, q) //
2021-11-02 23:38:02 317
原创 C++ std::cout 打印不出来uint8_t 和 int8_t
今天在测试程序时发现,发现一直打印不出某些数据,检查了好多遍,没有发现问题。经过多次测试,发现凡是uint8_t和int8_t的数据,都无法用std::cout打印出来。随后写个小程序测试了一下,发现确实如此。查过资料才明白,其中的原因。不得不说是个好坑。。。#include<iostream>int main(){ uint8_t a = 10; int8_t b = 5; std::cout << "uint8_t a: " << a &
2021-10-27 23:30:42 6999 4
原创 C++ std::vector删除元素的几种方式及区别
容器vector在删除过程中,常用的函数。函数作用pop_back()删除 vector 容器中最后一个元素,该容器的大小(size)会减 1,但容量(capacity)不会发生改变。erase(iter)删除 vector 容器中iter迭代器指定位置处的元素,并返回指向被删除元素下一个位置元素的迭代器。该容器的大小(size)会减 1,但容量(capacity)不会发生改变。erase(iter1,iter2)删除 vector 容器中位于迭代器 [iter1,i
2021-10-24 23:19:30 38434
原创 C++ std::vector: vector中元素的存储方式 size、capacity、reserve、resize的使用
1. vector的对象的存储方式为了支持随机访问,vector将元素连续存储–每个元素紧挨着前一个元素存储。容器中元素是连续存储的,且容器的大小是可变的。在容器中增加元素时。vector根据存储元素的大小,在内存上申请一个空间,用于存储数据,空间的大小通常会大于所存储元素的实际大小,并且预留出一部分预留的空间,以便再次增加数据时,可以不用重新开辟空间。当容器再次增加新的元素后,首先判断预留的空间是否够用,如果够用直接在预留空间中存储。如果预留的空间不够,需要在内存中开辟一整块新的更大的空间,并将ve
2021-10-24 10:54:45 2793
原创 标准输入、标准输出、标准错误 重定向及管道
1. 标准输入、标准输出、标准错误文本流存在于Linux的每个进程中。当Linux启动一个进程时,会自动打开三个的端口:标准输入(Standard Input)、标准输出(Standard Output)和标准错误(Standard Error)。进程通常会通过这三个端口进行输入和输出。以bash进程为例,一个运行的bash就是一个进程。默认情况下,bash的标准输入连接到键盘上,标准输出和标准错误连接到屏幕。对于一个程序来说,虽然它总会打开这三个流,但是他会根据需要使用,并不一定要使用。如:$ l
2021-10-04 19:36:36 1697
原创 Linux 软连接和硬链接
1. 硬链接当文件夹增加一个文件的条目时,就会创建一个指向文件的硬链接(Hard Link)。一旦有了对应文件的硬链接,这个文件就纳入了文件夹系统中。一个文件允许多个硬链接,即允许出现在多了目录中。文件拥有的硬链接数量,成为文件在整个系统总的链接数(Link Count)。当文件的链接数为0时,说明文件已经被孤立于文件系统之外。这样会被系统自动删除。1.1 删除硬链接大多数情况下,一个文件只存在于一个目录之下,所以链接数为1。在这种情况下,一旦删除该文件的条目,也就是删除了一个硬链接,那么
2021-10-04 13:59:21 415
原创 asn1 库的安装及asn1源文件编译C / CPP文件
1. 前期准备github地址:https://github.com/vlm/asn1c环境:ubantu18.04的使用将asn1的库从GitHub克隆到本地$ git clone https://github.com/vlm/asn1c.git参考: https://github.com/vlm/asn1c/blob/master/INSTALL.md 执行一下命令进行安装。$ sudo test -f configure || autoreconf -iv$ ./configure
2021-09-30 19:15:07 2178
原创 C++类: 类中的静态成员
类的静态成员与类本身直接相关,而不是类的各个对象保持关联1. 声明静态成员在成员声明之前,加上static关键字,使其与类的成员关联在一起。静态成员可以是public或者private的。惊天数据成员的类型可以使用常量、引用、指针、类类型等。#include <iostream>struct test{public: static int a; // 定义静态成员 static char b; // 定义静态成员public: static int m
2021-09-15 17:44:28 548
原创 C++类: 聚合类
1. 聚合类的基本概念聚合类使得用户可以直接访问其成员,并且具有特殊的初始化语法形式。当一个类满足如下条件时,我们说他是聚合的:所有成员都是public的。没有定义任何构造函数。没有任何类内初始值。没有基类,也没有virtual函数如:struct test{ int a; string b;};2. 聚合类赋初值的基本方法struct test{ int a; string b;};test x = {1, "hello world"};
2021-09-15 12:20:38 1010
原创 C++类: 构造函数隐式转换及explicit关键字
1. 构造函数的隐式转换C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。构造;默认且隐含的类型转换操作符。#include <iostream>struct test{public: test(bool ii) {};};int main(){ test x = 1; // 隐式转换构造,拷贝初始化 test y(2); // 直接赋值构造}2.抑制构造函数的隐式
2021-09-15 11:02:45 415
原创 C++ 类:构造函数(2)
1. 构造函数初始值列表初始化与构造函数内赋值class test{public: test() { a = 10; // 构造函数内赋值(实际上在调用函数时,已经对a进行了初始化为0,此处是再次进行赋值) }public: int a;};class test{public: test() : a(10) {} // 利用构造函数列表进行初始化public: int a;};注意:虽然上述两种法效果相同:当构
2021-09-14 16:53:34 112
原创 C++ 类:访问控制与封装
1. 访问说明符在c++中,使用访问说明符加强类的封装性。public:定义在public说明符之后的成员在整个程序内被访问,public定义类的接口。private:定义在private说明符之后的成员可以被类的成员函数访问,但是不是被使用该类的代码访问,private部分封装了(隐藏了)类的实现细节。注意:一个类可以包含任意个访问说明符,对某个说明符出现的次数也没有限制。每个访问符说明了接下来成员访问的级别,其有效范围直到出现下一个访问说明符或者到达类的结尾处为止。2.clsss和stru
2021-09-12 12:13:58 136
空空如也
C++智能指针问题,求大家解惑
2021-08-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人