自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(113)
  • 收藏
  • 关注

原创 对《C语言深度解剖》(第2版)这本书的一个阅读笔记

该系列,是我暑期对《C语言深度解剖》这本书的一个阅读笔记。

2022-05-31 19:10:51 295

原创 初识C语言

本篇博主以自己在学习C语言的一些内容为基础,结合自己的学习经验将这些内容拓展成对C语言小白具有一些推动认识作用的文章。本篇的出发点是意在帮助C语言小白更好的上手C语言。​ 本篇的题目是 初识C语言 ,也就是说,本篇是对C语言基础内容的一些了解,在看完本篇之后,C语言小白们能够对C语言有一些大致的认识就可以,毕竟没吃过猪肉,也得见见猪跑吧。​ 对C语言的更多内容将会在后面的文章中更新。

2022-04-11 13:35:00 688

原创 安装 Gazebo 基于 Arm64 Ubuntu 22.04

安装 Gazebo 基于 Arm64 Ubuntu 22.04

2024-05-15 08:54:34 398

原创 【ROS2】节点

ROS2 节点

2024-05-12 17:15:47 515

原创 【ROS2】功能包

ROS2 功能包

2024-05-12 17:12:41 459

原创 【ROS2】工作空间

ROS2 工作空间

2024-05-11 22:01:59 319

原创 【ROS2】安装与测试

ROS2 安装与测试

2024-05-11 21:35:26 492 1

原创 内联函数为什么不能声明定义分离?

内联函数为什么不能声明定义分离?

2024-05-09 16:23:04 174

原创 Ubuntu 根目录扩容

删除所有快照,关闭镜像,在 vm 上找到该镜像的硬盘设置,进行扩容;物理机:MacBook Air M2 Sonoma 14.4.1。虚拟机:VMware Fusion Player 13.5.0。(以我的实际情况为例)和扩容之后未分配的分区。重新打开 GParted 或者单击窗口的左上角。开启镜像,进行快照,防止扩容失败导致数据丢失;的右边有个锁,此时直接对分区。,可以观察到该分区挂载到了目录。能够看到挂载到根目录的分区。单击右键,再点击选项。进行扩容是扩不了的;单击左键,进行扩容。

2024-04-30 10:26:11 433 1

原创 主从Reactor高并发服务器

实现主从Reactor One Thread One Loop服务器

2023-10-10 14:52:29 677

原创 深入解析select、poll、epoll:Linux网络编程的三种IO模型

IO = 等待数据就绪 + 数据拷贝

2023-09-18 15:02:05 293

原创 掌握Linux线程编程的关键要点

线程是CPU调度的基本单位,在Linux中是没有线程的概念的,取而代之的是轻量级进程,也叫做LWP。

2023-09-16 15:56:52 298

原创 深度剖析Linux信号机制

首先pending位图该标志位置1,然后当信号检测时发现该信号到来了,那么就把该标志位置0同时block的该标志位置1,再去执行该信号的动作,假设该动作持续时间很长(比如handler中一直在循环),然后又有同种信号来了,此时pengding位图此标志位仍然置1,但此时该信号已经被阻塞(屏蔽)了,此后如果一直来同种信号,那么该标志位一直置1。当我们每次从内核态切换的时候,都会进行一次信号检测,检测pending位图中有没有需要处理的信号,当这些信号的动作是默认动作或者忽略动作时,直接就又返回用户态了。

2023-09-15 09:51:29 281

原创 ProtoBuf的学习并且制作了一个网络通讯录项目

本文章介绍了ProtoBuf的安装、学习,比较了ProtoBuf和Json的性能,并且基于ProtoBuf制作了一个通讯录项目。

2023-07-11 22:45:05 397

原创 【进程间通信】共享内存(Shared Memory)

共享内存是System V系列的一种进程间通信的方式。共享内存允许多个毫不相干的进程读取和写入同一块物理内存,当某个进程往共享内存中写入数据时,其它进程就能够立马读取到共享内存中的数据,从而达到进程间通信的目的。这也是所有进程间通信方式中最快的一种。

2023-02-20 16:06:40 2393 1

原创 使用和制作动、静态库

从一开始的helloworld,到现在熟练使用编程,我们在无时不刻的使用库。可以想一下,我们明明没有写printf函数的实现,但是加上头文件后,却可以使用它。我们想一下可执行程序的生成过程,预处理、编译、汇编、链接。前三步是将一个源文件(.c)变成一个可重定向目标二进制文件(.o),最后一步的链接是将无数个.o文件集合成一个可执行程序。那么如果使用者只持有自己的.c文件和别人的.o文件和.h文件,这不就成了。.h文件供使用者查看方法,.o文件供使用者调用方法。

2023-02-17 16:58:02 742

原创 二叉树的统一迭代方式

之前的方法记录过很多二叉树的迭代遍历方法,但是没有一种是能够统一前中后序的代码的,也就导致要写前中后序的迭代遍历需要有不同的思维方法。所以这里给出一种统一的迭代方式。

2023-02-08 21:15:43 147

原创 二叉树的迭代遍历

二叉树的迭代遍历,也就是非递归遍历。思想就是利用栈存储节点,当访问的时候从栈弹出。

2023-02-08 21:14:37 372

原创 二叉树的层序遍历

二叉树的非递归层序遍历需要借用队列来实现。

2023-02-08 21:13:48 1339

原创 二叉树的递归遍历

二叉树的前、中、后序遍历的区别就是访问该节点的顺序,以前序举例就是先访问节点、后去寻找左右孩子节点。

2023-02-08 21:12:47 294

原创 虚函数的复杂(继承)内存布局

继承关系一般分为:单继承和多继承,而多继承的出现就又导致了一种特殊的继承关系菱形继承,为了解决菱形继承的冗余和二义性,又有了菱形虚拟继承的解决方案。本篇主要介绍以上四种继承关系的类对象虚函数内存布局。

2023-02-03 22:24:04 706

原创 C++多态

不同对象去完成某个相同行为时会呈现出不同的状态。举个例子:普通人和残疾人去买车票,但残疾人会有优先通道和优惠。

2023-02-02 21:38:02 194

原创 C++继承

概念:C++的继承机制是面向对象程序设计使代码可以复用的最重要的手段,允许用户在保持原类的特性的基础上进行拓展,这样新产生的类叫做派生类(父类),原类叫做基类(子类)。

2023-02-01 23:57:57 347

原创 C++模版的全特化与偏特化

全特化:对模版所有类型参数做处理;偏特化:对模版部分类型参数做处理;函数模版没有偏特化;函数模版的全特化与函数重载很像,但并不是一回事类模版特化由于会导致代码量剧增,所以一般作用于仿函数编译器选择模版的顺序为(先寻找最合适的模版):模版全特化——>模版偏特化——>普通模版。

2023-01-08 19:13:34 423

原创 C++非类型模版参数

非类型模版参数是有限制的,一般只能够传整形数值(变量不可以),可以给缺省。

2023-01-08 19:11:51 140

原创 linux下软硬链接到底是什么?

在Linux下,系统标识文件的唯一方式就是inode号,而对于人来说,看数字来标识文件是极其困难的,所以就有了文件名,通过文件名与inode号的相互映射,我们人就能很方便的标识文件,而文件名与inode号的相互映射就叫做硬链接。

2023-01-07 11:59:01 678

原创 vector的实现和使用中的常见错误

因为该代码的原意是调用fill(2)函数,但实际上调用的是range(3)函数,因为我们的参数10和3都是int类型,而fill(2)的两个参数类型分别是size_type和const value_type&,range(3)的两个参数类型都是InputIterator。当该函数删除position位置上的数据后,由于vector是个数组,所以该位置后面的元素会向前移动,就会导致position位置上仍有数据,linux下g++就是这样实现的。STL库中的做法是这样的:重载更适合的参数类型的构造函数。

2023-01-06 18:32:48 1945 1

原创 Linux文件管理---磁盘上文件如何管理(inode)

一块磁盘中有很多的磁片,每片都有两面,每面都有很多环磁道组成,每环磁道分为很多扇区,每个扇区的大小为512byte,而这就是磁盘的最小存储单元了。每一面都有一个磁头,磁头的左右摆动配合磁片的高速旋转可以使得磁头锁定磁盘的每一个扇区,从而能够找到磁盘上的文件。(所有的磁头都是一起绑定运动的)

2023-01-05 13:16:30 346

原创 缓冲区的深刻理解

我们无论往显示器里读写、文件里读写、网卡里读写等等,都是在访问外设,而一旦访问外设速度就很慢。假设不存在缓冲区的话当前进程在进行IO时只能够当前进程去等待,就会导致当前进程的效率降低;而此时如果当前进程不自己等待,而是将需要IO的数据拷贝到缓冲区里,由缓冲区决定IO的时间、次数等,这样就会提高当前进程的效率。

2023-01-05 10:47:21 507 1

原创 Linux文件描述符fd详解&&重定向原理

一个系统中,会打开非常非常多的文件,这些文件OS也是需要进行管理的,而管理的方法就是先描述再组织,将所有文件共有的属性描述成结构体struct file __rcu,而在进程的PCB里有一个指针struct files_struct *files 指向结构体struct files_struct,该结构体中有一个指针数组struct file __rcu * fd_array[NR_OPEN_DEFAULT];属于当前进程的所有文件的结构体指针都在该数组中,而该数组的下表就是文件描述符fd!

2023-01-04 18:47:20 1136

原创 Linux文件操作(系统调用函数)

C库函数对文件进行操作时往往会传入w、r、w+、r+、a等参数,这些参数决定了文件打开以及访问的方式,但是这些都是对系统调用函数的封装,真正的系统调用函数并没有这些参数,有的只是一个参数flags。

2023-01-04 17:28:51 301

原创 Linux利用fork&&exec系列函数执行其它程序

fork函数可以创建子进程,子进程会以父进程为模版拷贝PCB,并且执行父进程的代码,但是有一种情况我们并不想子进程执行父进程的代码,而是想让子进程去执行其它程序,这时就需要用到exec系列函数了。

2023-01-04 16:25:58 451

原创 LInux僵尸进程的解决方法

一个进程在退出后,操作系统会释放该进程对应的资源,但仍会保留一些信息(pid、退出状态、运行时间等),此时父进程必须主动去获取该信息,若父进程不获取则会导致该信息一直在内存中保留,而该进程就被称为僵尸进程。

2023-01-04 15:19:47 774

原创 Linux进程地址空间

计算机运行时,内存中同时存在很多的进程,但每个进程都认为自己是独占内存的!在32位机器上,每个进程都认为这16G的内存全部属于自己,为了实现这一思想,于是每个进程PCB里都存在一个结构体指针struct mm_struct *mm,该指针指向的结构体就是进程地址空间。

2023-01-03 21:38:30 515

原创 Linux环境变量

环境变量是进程中的一种变量,它具有各种特殊的意义,但作用一般是为用户和OS提供他们想要的信息。环境变量是能够被子进程继承下去的。

2023-01-03 21:37:04 2253

原创 理解Linux中的进程状态

一个CPU同时只能调度一个进程,所以操作系统就维护起了一个运行队列runqueue,在这个队列中排队的进程就称为运行(R)状态,并不是正在被CPU调度的进程称为运行(R)状态。

2022-12-27 10:44:54 741

原创 让你真正理解进程

教材中和市面上的书籍中总是对进程有这样的解释:一个运行起来(加载到内存)的程序。

2022-12-25 20:24:56 54

原创 理解操作系统(Linux)

操作系统是一款对软硬件资源进行管理的软件!操作系统通过合理的管理软硬件资源的手段,为用户提供良好的(稳定的、高效的、安全的)执行环境。

2022-12-22 22:09:17 775

原创 冯·诺伊曼体系结构

CPU只和内存接触;所有的外设,数据的输入和输出都先加载到内存,再由CPU执行。

2022-12-22 21:07:55 86

原创 Linux中gdb的使用

gdb是有GNU开源组织发布的一款软件,用于在unix/linux环境中使用命令行的方式进行调试程序的工具。

2022-12-22 15:50:53 922

空空如也

空空如也

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

TA关注的人

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