自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(177)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++码农日记笔记

环境搭建。

2024-03-18 16:52:43 466

原创 安装yocto过程中遇到的问题记录

然后再尝试git clone。

2024-03-13 18:15:46 514

原创 HTTP/1.1和HTTP/2的区别

这些是HTTP/1.1和HTTP/2之间的一些关键区别。HTTP/2相对于HTTP/1.1提供了更好的性能和效率,特别是在处理大量请求和传输大量数据时。HTTP/2: HTTP/2引入了多路复用(multiplexing)的概念,允许同时在同一连接中发送多个请求和响应。HTTP/1.1和HTTP/2是两个不同的版本的超文本传输协议(HTTP),用于在客户端和服务器之间传输信息。HTTP/2: HTTP/2使服务器能够主动推送额外的资源给客户端,提前发送可能需要的资源,以减少客户端的请求次数和等待时间。

2024-03-13 16:55:07 711

原创 Linux 命令或者一些工具

expect命令spawnexpectsendsend_userexit。

2024-03-13 16:43:28 277

原创 打桩的含义,使用

通过打桩,我们可以创建虚拟的(或者称为模拟的)对象,替代被测对象的某些部分,从而模拟所需的行为。这样,我们就可以单独测试被测对象的特定功能,而不必担心外部依赖的影响。在程序中,“打桩”(英文:stubbing)是一种测试技术,它允许模拟或替代程序中的某些部分,以便进行有效的单元测试或集成测试。打桩通常通过使用特定的测试库或框架来实现,在测试代码中设置模拟对象的期望行为,或者在运行时替换依赖项的实际实现。总而言之,打桩是一种测试技术,用于模拟或替代程序中的部分内容,以便进行更有效的单元测试或集成测试。

2024-03-13 16:31:27 229

原创 clang安装与使用

简单来说,Clang是一个编译器,目前用来编译C、C++、Objective-C语言。更进一步来说,Clang只是一个编译器前端,其将上述的C类语言编译成一种“汇编语言(中间语言)”。接着,通过LLVM(Low Level Virtual Machine)作为后端,将这种“汇编语言”编译成针对不同机器的二进制机器语言。

2024-03-07 18:00:48 483

原创 jenkins 搭建git自动部署多台服务器

shell中通过git等来熟悉操作。

2024-02-05 18:36:01 144

原创 解决The following packages have unmet dependencies

【代码】解决The following packages have unmet dependencies。

2024-02-05 17:02:47 133

原创 汇编语言语法和debug

文件扩展名为 “.s” 通常是代表汇编语言(Assembly)文件。汇编语言是一种低级的编程语言,它使用特定的符号代表机器指令。在汇编语言中,每个指令对应机器代码中的一条指令。“.s” 文件通常包含了用汇编语言编写的机器指令,可以被汇编器(Assembler)将其转换为可执行文件。用compiler-clang llvm编译后替换某个.s。python实现替换某个.s – 待编辑。

2024-01-24 17:59:28 358

原创 Yocto和buildroot

Yocto Project 是一个开源项目,提供了一个框架和工具集,用于构建定制的嵌入式 Linux 发行版。Yocto Project 使用了一个类似于元数据的层次结构,可以方便地管理和定制软件包、内核和文件系统,以满足特定项目的需求。Buildroot 是另一个嵌入式 Linux 系统构建工具,它旨在提供一个简单、高效的方法来构建最小的嵌入式 Linux 系统。Buildroot 的配置是通过一个文本文件进行的,其中列出了要包含在构建中的软件包和选项。它们有一些相似之处,但也有一些区别。

2024-01-24 17:39:59 478

原创 Linux平台下安全编译

need investigate

2024-01-24 15:43:10 858 1

原创 wsl中编译linux内核模块

在WSL 2环境中,linux/atomic.h是内核级别的头文件,但是WSL 2并不包含完整的Linux内核源代码。因此,即使您安装了linux-libc-dev包,也无法找到该文件。使用atomic_fetch_add函数来保证原子递增操作,而使用atomic_load函数来获取counter的当前值。软件源更新:https://blog.csdn.net/weixin_60461563/article/details/121814421。

2023-12-20 15:55:13 400

转载 gitk使用

https://blog.csdn.net/weixin_42271802/article/details/109640615?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170295265316800197061831%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170295265316800197061831&biz_id=0&utm_

2023-12-19 15:34:22 50

原创 lock_guard示例

std::lock_guard是一个C++中的模板类,用于在作用域内自动加锁和解锁。

2023-12-11 13:46:05 409

原创 pipe函数、SIGCHLD、execvp

该示例中,首先使用pipe函数创建一个管道,然后调用fork函数创建一个子进程。在子进程中,通过read函数从管道中读取数据,并打印输出。在父进程中,通过write函数将数据写入管道。通过这种方式,子进程和父进程之间就可以进行通信了。请注意,在使用完管道后,需要分别关闭管道的读端和写端。

2023-12-08 14:47:01 411

转载 C 库函数 system/WIFEXITED/WEXITSTATUS

C 库函数 system/WIFEXITED/WEXITSTATUS。

2023-12-07 10:28:32 56

原创 fmt与##__VA__ARGS__

而##__VA_ARGS__是一个可变参数宏定义的特殊标记,用于表示可变数量的额外参数。##是连接符,用于将前面的内容和后面的额外参数连接起来。printf 函数的第一个参数就是格式字符串。例如,上面的Number1: %d Number2 :%d\n。是宏定义中的参数,表示宏可以接受可变数量的参数(例如,fmt 后面的参数)。是宏定义中的展开语法,用于将前面的内容和可变参数展开连接起来。fmt可以是一个字符串字面量,也可以是一个参数。,即使没有额外的参数传递给宏,宏定义仍然有效。和__VA_ARGS__

2023-12-01 10:37:53 494

转载 “## __VA_ARGS__”宏的介绍和使用

https://blog.csdn.net/bat67/article/details/77542165

2023-11-22 10:10:48 119

原创 Linux c/c++服务器开发实践

在Linux C++开发环境中,通常有两种方式来开发多线程程序,一种是利用POSIX多线程 API函数来开发多线程程序,另外一种是利用C++自带线程类来开发程序。pthread_join是个阻塞函数,函数pthread_join会让主线程挂起(即休眠,让出CPU),直到子线程都退出,同时pthread_join能让子线程所占的资源得到释放。子线程退出以,主线程会接收到系统的信号,从休眠中恢复。

2023-11-11 17:10:20 680

原创 为何将不使用的变量强制转换为void

原来做将不使用的变量强制转换为void是为了消除编译器警告, 告诉编译器这些变量我用过了, 你就别给我发警告了.

2023-10-18 13:49:10 124

原创 C++新经典10--vector以及其使用

(1)空vector。//创建一个string类型的空vector对象(容器),//现在mystr里不包含任何元素后续就可以用相关的一些操作函数往这个空对象里增加数据了。例如,可以往这个容器的末尾增加一些数据。这里可以使用vector的成员函数push_back往容器末尾增加数据。看看如下范例,注意看它的下标[0],[1],[2],…不断增长,如图13.3所示。(2)在vector对象元素类型相同的情况下,进行vector对象元素复制(新副本)。//把mystr元素复制给了mystr2。

2023-09-07 17:45:40 216

原创 C++新经典09--函数新特性、inline内联函数与const详解

(3)传统书写函数时一般将函数声明放在一个头文件中,将函数定义放在一个.cpp源文件中,如果要把函数定义放在头文件中,那么超过1个.cpp源文件要包含这个头文件,系统会报错,但是内联函数恰恰相反,内联函数的定义就放在头文件中,这样需要用到这个内联函数的.cpp源文件都能通过#include来包含这个内联函数的源代码,以便找到这个函数的本体(源代码)并尝试将对该函数的调用替换为函数体内的语句。当时曾经说过,这种constexpr函数,函数体必须要写的特别简单,如果写了某些多余的语句,那么编译就会出错,所以,

2023-08-21 17:31:33 199

原创 C++新经典08--范围for、new内存动态分配与nullptr

在C语言(不是C++)中,malloc和free是系统提供的函数,成对使用,用于从堆(堆空间)中分配和释放内存。(2)free/delete不要重复调用,因为free/delete的内存可能被系统立即回收后再利用,再free/delete一次很可能把不是自己的空间释放掉了,导致程序运行出现异常甚至崩溃。(2)堆空间是程序员自由决定所分配的内存大小,大小理论上只要不超出实际拥有的物理内存即可,分配速度相对较慢,可以随时用new/malloc分配、free/delete释放,非常灵活。例如代码行inta=4;

2023-08-21 14:54:53 173

原创 C++新经典07--auto、头文件防卫、引用与常量

auto关键字其实在C++98中就已经有了,只是那时候这个关键字没什么作用,但是到了C++11中,auto被赋予了全新的含义——变量的自动类型推断。auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型(这表明在声明变量的同时也要给变量初始值)。auto的自动类型推断发生在编译期,所以使用auto并不会造成程序运行时效率的降低。换句话说,在定义一个变量的时候,如果变量类型能够由系统推断出来,就不需要显示指定类型。

2023-08-21 11:01:43 555

原创 C++新经典06-- 语言特性

命名空间就是为了防止名字冲突而引入的一种机制。系统中可以定义多个命名空间,每个命名空间都有自己的名字,不可以同名。可以把命名空间看成一个作用域,这个命名空间里定义的函数与另外一个命名空间里定义的函数,即便同名,也互不影响(因为命名空间名不同)。(1)命名空间定义:(2)命名空间定义可以不连续,可以写在不同的位置,甚至写在不同的源文件中。如果以往没有定义该命名空间,那么这就相当于定义了一个命名空间,如果以往已经定义了该命名空间,那这就相当于打开已经存在的命名空间并为其添加内容。

2023-08-18 15:28:43 94

原创 C++新经典05--文件操作

文件在程序设计中是一个比较重要的概念,这里所说的文件,是指保存在硬盘、U盘等存储介质上的数据,这些存储介质(简称磁盘)上的数据就是以一个个文件的形式体现,每一个文件有一个对应的名字,称为文件名。操作系统也是以文件为单位对数据进行管理,例如想在磁盘上找数据,需要先按照文件名在该磁盘上找到对应文件,然后把文件中的数据读出来。如果要把数据写到磁盘上,也必须先在磁盘上建立一个文件,然后向这个文件中写入数据。以往程序执行输出的结果信息都是输出到屏幕上,而在程序执行中输入数据是通过键盘用诸如scanf等函数来输入。

2023-08-17 17:49:19 219

原创 C++新经典04--位运算

由此,就想到了位运算。通过按位与操作来判断某个二进制位是否被标记为1,通过按位或操作将某个二进制位标记为1,然后,就可以把上面的task变量中的内容保存到数据库里,下次该玩家再上线,再把这个内容从数据库中取出,就能判断该玩家的某个任务是否做过,做过的话就可以有一些其他的处理,如不让他再重复做了。现在每日任务只有10个,那么只需要使用其中的10位表示这10个任务是否做完就可以了,用0表示任务没做完,用1表示任务已经做完,用最右边的最低位表示第1个任务,然后依次往左,表示第2个任务,第3个任务……

2023-08-17 17:09:57 63

原创 C++新经典03--共用体、枚举类型与typedef

以往,代码中用的类型名都是C语言提供的标准类型名,如int、char、float、double等,当然,结构体、共用体、枚举类型等可以自己命名。此外,还可以用typedef关键字来定义新的类型名以代替已有的类型名。注意,typedef是用来定义新类型名的,不是用来定义变量的。看看如下代码:这相当于用INTEGER代表了int,那么定义整型变量就可以这样定义:也可以用typedef定义一个结构体类型:上面这段代码定义了一个新的类型名DATE(不是定义结构体变量,因为前面有typedef关键字。

2023-08-17 16:39:36 417

原创 C++新经典02--编译预处理

有几点说明:①宏名一般用大写字母表示,这是一种习惯,建议遵照这个习惯。②宏定义其实并不是C语言语句(虽然有时候会称其为语句),不必在行末加分号,如果加分号则连分号一起被替换了。③#define命令出现在程序中函数的外面,宏名的有效范围是#define之后到本源程序文件结束,不能跨文件使用,如果在另外一个源程序文件中使用,则需要在另外一个源程序文件中也做相同定义,或者把这些#define定义统一放到一个公共文件(如.h头文件)里,并用#include把这个公共文件包含到每个源程序文件中去。

2023-08-17 15:29:46 142

原创 C++新经典01--函数递归

定义内部函数时,在最前面加static关键字即可,内部函数又称为静态函数,使用内部函数,可以使函数只局限于其定义所在的源程序文件中,所以不同源程序文件中的同名函数彼此不受干扰,试想,如果分工不同的两个人编写两个不同的.cpp源程序文件,如果他们所写的函数同名,则在编译链接时会报错,如果用了static修饰这些函数,那么即使所起的函数名相同,也互相不受影响(因为这些函数被限制在当前定义所在的源文件中)。1.传统情形函数中的局部变量,一般来说,都是动态分配存储空间,也就是说,存储在动态存储区中。

2023-08-17 14:53:52 473

原创 交叉编译环境搭建

交叉编译工具链的命名规范是:arch [-vendor] [-os] [-(gnu)eabi]arch : 架构的意思,如ARM ,MIPSvendor: 工具链的提供厂商os: 支持的操作系统eabi:嵌入式应用二进制接口(Embedded Application Binary Interface)arm gcc还分为 是否支持操作系统支持操作系统: arm-none-linux-eabi-gcc不支持操作系统:arm-none-eabi-gcc说明:arm-none-eabi-gcc(ARM ar

2023-08-17 10:44:34 217

转载 DPDK环境搭建

【代码】DPDK环境搭建。

2023-08-16 14:42:18 187

原创 stack canary介绍

CONFIG_STACKPROTECTOR和CONFIG_STACKPROTECTOR_STRONG是Linux内核的配置选项,用于控制内核在编译时是否启用Stack Canary(栈保护)以及保护级别的设置。如果该选项被启用(设置为y或m),则内核会在关键的函数和代码路径中插入Stack Canary的相关代码。默认情况下,Canary的保护级别是较低的,只会对函数中使用了缓冲区的变量进行保护。在编译代码时,可以使用一些与Canary相关的编译选项来启用或禁用Stack Canary。

2023-08-10 15:03:17 305

原创 linux程序保护机制&gcc编译选项

PIE是一种可执行文件格式,它可以在内存中加载的任何地址上执行,而不依赖于固定的基地址。栈的大小是固定的,并且在程序运行期间是动态变化的。要在编译过程中启用 -z noexecstack 选项,您需要使用兼容的编译器,如GCC,并将选项作为命令行参数传递。如果这些节存在,则说明-pie参数已经生效,并且程序是以位置无关的方式编译的。代码段是被标记为可执行的,程序从代码段中获取指令并执行。具体来说,-pie参数用于生成位置无关的可执行文件,而位置无关的可执行文件通常与动态链接配合使用。

2023-08-09 17:57:24 972

原创 gcov和lcov的使用

代码覆盖率是对整个测试过程中被执行的代码的衡量,它能测量源代码中的哪些语句在测试中被执行,哪些语句尚未被执行。

2023-06-16 13:33:15 322

原创 gcc参数含义

D:表示添加宏定义。

2023-06-16 11:14:30 74

原创 gitk&的使用

添加tag搜索tag不同版本代码对比。

2023-06-16 11:12:51 117

原创 智能指针的实现和使用

【代码】智能指针的实现和使用。

2023-06-09 23:58:04 56

原创 gdb使用

bt是backtrace的缩写,显示所有的函数调用栈的信息,栈中的每个函数都被分配了一个编号,最近被调用的函数在 0 号帧中(栈顶)。显示栈中所有信息如:函数参数,本地变量等。

2023-05-26 10:46:30 40

原创 头文件和库文件

库文件一般是以二进制形式而不是C源文件形式提供给用户使用的。总结起来就是,库文件通过头文件向外导出接口。用户通过头文件找到库文件中。c语言在编译过程中会经过预处理(需要头文件) -> 编译 -> 汇编 -> 链接(需要库文件);执行时可能还有动态链接过程。头文件中有函数的申明,库文件实现函数的定义。

2023-05-24 14:03:28 591

hadoop笔记2.pdf

hadoop平台搭建相关资料,如何利用hadoop搭建大数据平台,以及一些基本的Linux命令。shell编程

2020-03-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除