自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字符 \0 和 ‘0‘在内存中分别存的什么值

**内存存储** | 存储为 `0x00` | 存储为 `0x30` |- **ASCII 值**:`'0'` 的 ASCII 值是 `48`(十进制),对应十六进制为 `0x30`。- 这是因为 `'0'` 到 `'9'` 的 ASCII 值是连续的,从 `48` 到 `57`。- `'0'` 在内存中存储为 `0x30`,是一个可打印的字符,表示数字 0。- **ASCII 值**:`\0` 的 ASCII 值是 `0`。

2025-03-26 15:28:40 428

原创 字符\0与‘0‘有什么区别

**用途**:例如,在 C 语言中定义字符串 `"Hello"` 实际上是由字符 `'H'`, `'e'`, `'l'`, `'l'`, `'o'` 以及末尾的 `\0` 组成的字符数组。- **含义**:`'0'` 表示字符数字 0,即字符形式的 0。例如,从控制台读取一个数字字符并将其转换为对应的整数值时,你会遇到 `'0'` 到 `'9'` 的字符。- **表示方式**:直接使用单引号括起来的 `0`,即 `'0'`。- `'0'` 是一个具体的字符,用于表示数字字符 '0'。

2025-03-26 15:28:07 297

原创 lvm2卷创建示例

以上就是一个基本的LVM2工作流程示例,包括从创建物理卷、卷组到逻辑卷的整个过程,并展示了如何对逻辑卷进行扩展。它允许你创建抽象层于物理存储之上,使得管理和调整逻辑卷变得更为容易。下面是一个简单的示例,演示如何使用LVM命令来创建和管理逻辑卷。现在,你的逻辑卷已经准备好被使用了。接下来,使用之前创建的一个或多个物理卷来创建一个卷组(VG)。首先,你需要将一个或多个硬盘或分区转换为物理卷(PV)。这将显示逻辑卷的使用情况,并确认其已成功挂载。然后,在卷组中创建逻辑卷(LV)。

2025-02-08 11:29:08 471

原创 数字 0、转义字符 ‘\0‘、NULL在计算机内存中存储的值是否相同?

例如,在32位系统上,一个 `int` 类型的 `0` 通常占用4个字节,所有这些字节都为 `0`。- **存储**:作为一个字符存储时,它只占用1个字节,并且这个字节的内容是 `0`,即 `0x00`。- **`NULL`** 当用作指针时,在大多数现代平台上也会被表示为全零比特模式,但具体的字节数取决于指针的大小(例如,在64位系统上,`NULL` 指针将占用8个字节,全部为 `0`)。- **数字 `0`** 和 **转义字符 `'\0'`** 在单个字节层面确实是一样的,都是 `0x00`。

2025-01-04 17:25:29 377

原创 数字0、字符‘0’、转义字符‘\0’、NULL有什么区别?

**`NULL`** 是一个特殊的指针值,表示无效地址或未初始化的指针,在现代 C++ 中建议使用 `nullptr`。- **类型**:宏定义或常量,通常定义为 `(void*)0` 或 `nullptr`(在 C++11 及以上版本中)。- **字符 `'0'`** 是一个具体的字符,代表数字字符 '0',其 ASCII 值为 48。- **转义字符 `'\0'`** 是一个特殊的字符,值为 0,主要用于标记字符串的结尾。- **用途**:用于表示字符串或字符序列中的字符 '0'。

2025-01-04 17:24:50 519

原创 c++的类中的私有成员变量是否可以在cpp文件中再定义一次

对于静态成员变量,情况有所不同。静态成员变量是属于类的,而不是属于类的实例的。因此,静态成员变量需要在类的外部定义(但只定义一次),通常在。这是因为类的成员变量是属于类的实例(对象)的一部分,而不是独立的变量。文件中重新定义私有成员变量,但你可以在类的构造函数中初始化它们。这是不正确的,并且会导致编译错误或未定义行为。在C++中,类的私有成员变量在类的声明(通常在头文件。如果你误将类的成员变量当作全局变量来处理,可能会在。然而,有一些相关的概念可能会让你误以为需要在。中)中定义一次后,不应该在。

2024-12-17 18:05:03 385

原创 base64编码是什么?如何对数据进行base64编码?

Base64编码是网络上最常见的用于传输8Bit字节码的编码方式之一,它采用64个可打印字符(包括小写字母a-z、大写字母A-Z、数字0-9、符号“+”、“/”)来表示二进制数据。

2024-12-14 11:10:47 751

原创 效率提升和技巧

【代码】效率提升和技巧。

2024-12-06 16:10:53 308

原创 git常用操作

【代码】git常用操作。

2024-12-04 19:29:25 371

原创 脚本在执行命令的输出结果或者文件中搜索错误关键字

【代码】脚本在执行命令的输出结果或者文件中搜索错误关键字。

2024-11-28 14:15:00 132

原创 字符0和字符串的结束符\0有什么区别

在 C 和 C++ 中,字符'0'和字符串的结束符'\0'是两个完全不同的概念。它们在用途、表示和处理方式上都有显著的区别。

2024-11-27 14:12:36 601

原创 cd /root/test && rm -rf build > /dev/null 2>&1的作用

它的作用是仅当第一个命令成功执行(即返回状态为0,表示没有错误)时,才会执行第二个命令。选项表示强制删除,即不会因为文件或目录不存在、没有写权限或只读文件等原因而停止执行。,即一个特殊的设备文件,用于丢弃所有写入其中的数据。选项表示递归删除,即不仅删除指定的目录本身,还删除其下所有的文件和子目录。是“change directory”的缩写,意味着“改变目录”。是“remove”的缩写,表示“删除”。:这是一个改变当前工作目录的命令。是要切换到的目标目录的路径。是要删除的目录的名称。:这是一个删除命令。

2024-11-25 15:52:11 282

原创 使用同一个std::ifstream输入文件流类对象的并发问题

场景:创建一个std::ifstream对象in,有多个线程需要使用同一个in对象读取对应文件的内容(希望提升效率和节省资源,所以只创建一个对象)。std::ifstream对象后,并使用其read接口读取文件内容时,对应的in对象的文件offset会自动移动sizeof(buffer)的大小。如果in对象只创建一个,有多个线程同时使用in对象的read进行操作,那么offset值会混乱,导致并发读取文件内容错误。在多线程读取文件内容时,使用同一个fd和各自线程需要的offset。

2024-11-16 17:22:12 257

原创 C 语言中的不完全类型(incomplete type)

不完全类型声明:允许你在不知道结构体具体内容的情况下声明一个结构体类型。typedef:可以简化类型声明,使代码更易读。指针:使用不完全类型声明时,只能定义结构体类型的指针,不能定义结构体类型的实例,也不能访问结构体成员。通过这种方式,你可以在头文件中使用类型而不必包含定义的头文件。实际的结构体定义可以在源文件中包含。

2024-11-08 11:00:18 790

原创 std::shared_ptr和std::unique_ptr有什么区别?

和 std::shared_ptr都支持自定义删除器(deleter),允许你指定如何释放资源。这对于管理自定义分配器或需要特殊清理逻辑的资源非常有用。适用于独占所有权的场景,性能更好,开销更小。适用于共享所有权的场景,提供了引用计数和线程安全的引用计数操作,但会有额外的性能开销。选择哪种智能指针取决于你的具体需求和设计。

2024-11-08 10:44:29 374

原创 std::shared_ptr和std::unique_ptr有什么区别

和 std::shared_ptr都支持自定义删除器(deleter),允许你指定如何释放资源。这对于管理自定义分配器或需要特殊清理逻辑的资源非常有用。适用于独占所有权的场景,性能更好,开销更小。适用于共享所有权的场景,提供了引用计数和线程安全的引用计数操作,但会有额外的性能开销。选择哪种智能指针取决于你的具体需求和设计。

2024-11-07 17:00:09 475

原创 hex to signed64-内存数据转换为int64

要将一个无符号的 64 位十六进制数转换为有符号的 64 位整数(即负数),需要按照二进制补码的规则进行转换。

2024-11-05 17:09:18 266

原创 int8类型的数值-48在内存中是怎么存储的

48 的二进制补码表示11010000。最高位 (MSB):1 表示这是一个负数。其余位1010000是 48 的二进制补码表示。这种表示方法确保了加法和减法操作的一致性,并且能够有效地利用有限的位数来表示有符号整数。

2024-10-31 11:04:53 338

转载 [转]stdin,stdout,stderr

如果 `buf` 是 `NULL`,并且 `mode` 为 `_IOFBF` 或 `_IOLBF`,`size` 被忽略,系统自动管理缓冲区大小。3. 对于标准输入、输出和错误流(`stdin`、`stdout`、`stderr`),其缓冲模式和缓冲区可能由系统默认设置,调用 `setvbuf()` 可能会改变这些默认设置。1. `setvbuf()` 必须在第一次读写操作之前调用,即在 `fopen()` 之后、`fread()`、`fwrite()`、`fprintf()` 等之前调用。

2024-04-17 15:21:53 121

原创 创建字符设备在用户态读取物理地址内存

【代码】创建字符设备在用户态读取物理地址内存。

2024-04-09 16:46:05 274

原创 gcc -o $@ $^的作用

这条命令的作用是将 `main.o`、`module1.o` 和 `module2.o` 这些目标文件链接成一个名为 `my_program` 的可执行文件。- `$@`:表示规则的目标文件名。比如,如果当前规则的目标是 `my_program`,那么 `$@` 就会展开为 `my_program`。- `$^`:表示规则中所有依赖文件(前提条件)的列表。它会替换成依赖文件的完整路径,中间由空格分隔。

2024-03-25 10:36:42 359 1

原创 fiemap使用示例

【代码】fiemap使用示例。

2024-03-20 14:31:48 269 1

原创 NVMe协议——Atomic Write特性

​​​​​​​​​​​​​​Namespace Atomic Boundary Size Power Fail (NABSPF):指示特定于NAWUPF的原子边界大小。​​​​​​​​​​​​​​Namespace Atomic Compare & Write Unit (NACWU):NS原子比较&写命令的大小。​​​​​​​​​​​​​​Namespace Atomic Boundary Offset (NABO):NS第一个原子写边界开始的LBA。缺点:需要较多的SSD缓存,限制了支持的原子写大小。

2023-09-18 11:01:19 839

原创 设计与原型、重构、实现、测试的关系

设计是一个过程,在这个过程中探讨、启发,寻求最简洁有效的解决方法。设计一个方案是思维从模糊混沌演化到清晰明确的脑力过程,是对大脑中与该方案有关的现有的信息的加工,使其结构化、模型化。在设计的过程中,大脑需要的信息可能不足,或者信息量过大、过于复杂,超出大脑和设计方案的承载限度,所以可以去做原型。原型实现的过程中会展现更多的信息、细节,以验证方案可行性、补充方案的不足,并将方案的设想落实到原型中以降低方案的抽象、复杂度。

2023-09-12 10:18:58 156

原创 使用C语言实现RAID 5

要使用C语言实现一个基本的RAID 5系统,你需要考虑磁盘I/O、奇偶校验计算和数据恢复等关键方面。以下是一个简化的示例,用C语言演示如何实现一个基本的RAID 5系统,其中有3块磁盘驱动器。请注意,这个示例仅用于教育目的,实际的RAID 5系统会更复杂,需要更多的错误处理和优化。此示例假定每个磁盘块的大小相同。在生产环境中,建议使用现有的RAID解决方案或咨询专业存储解决方案供应商,而不是手动实现RAID 5。

2023-09-08 18:29:52 184 1

原创 RAID技术简介

这些是常见的RAID级别,每个级别都有不同的算法和特点,适合不同的用例和需求。选择合适的RAID级别取决于性能、可用性和容错性的权衡,以及存储设备和应用程序的需求。除了上述级别外,还存在其他RAID级别,如RAID 50、RAID 60等,它们结合了不同级别的特点来满足特定需求。RAID (Redundant Array of Independent Disks) 是一种数据存储技术,通过组合多个硬盘驱动器来提高性能、可用性和/或容错性。不同的RAID级别使用不同的算法和策略来实现这些目标。

2023-09-08 18:27:54 109 1

原创 2023.8月总结

毕业之后,一直从事linux内核驱动的开发和维护,主要用C语言。最近有空看了下python的基础知识。

2023-09-08 15:58:27 157 2

原创 python操作NVMe盘设备文件/dev/nvme0示例

您可以使用标准的文件I/O操作和相应的系统库。以下是一个基本的示例代码,演示如何在Python中读取和写入NVMe设备文件。请注意,NVMe设备文件通常需要超级用户或管理员权限才能访问。确保您以具有适当权限的身份运行以下代码。要在Python中操作NVMe盘设备文件。

2023-09-08 15:28:11 785 1

原创 VFS的IO栈

整个I/O栈允许应用程序通过高级抽象接口(系统调用和C库函数)访问文件和数据,而不必关心底层存储硬件和文件系统的细节。VFS的I/O栈是操作系统中文件系统管理的关键组成部分,使文件操作能够在不同类型的文件系统上实现统一的接口。在Unix和Unix-like操作系统中,VFS用于抽象不同类型的文件系统,使应用程序和系统能够以一种统一的方式与不同文件系统交互,而无需关心底层文件系统的细节。I/O栈是VFS中的一个关键组成部分,它包含了用于执行文件系统I/O操作的各个层次和模块。

2023-09-07 17:09:12 197

原创 SSD的垃圾回收-GC

当前大多数SSD盘的内部实现,单个single block中的物理空间一般是按照4K顺序分配(与NAND的物理结构有关,可以调整分配大小,也可以组成super block的所有single block交替分配若干个4K)。假如只有一个single block,有1024个4K的空间,总空间为1024*4K = 1MB大小。APP向这个SSD盘写入2个文件file1和file2的数据,file1和file2分别为512KB大小。

2023-09-07 15:52:07 856

原创 NVMe TP4146: Flexible-Data-Placement-Mode-FDP分析和思考

NVMe TP4146: Flexible-Data-Placement-Mode-FDP分析

2023-09-07 11:52:46 2938

原创 elf程序文件的结构和解析代码示例

ELF(Executable and Linkable Format)是一种常见的可执行文件和共享库文件的格式,通常在Unix和Unix-like操作系统上使用。ELF文件结构包括多个部分,用于描述可执行程序或共享库的各个方面。.text.data.bss.symtab这些部分构成了ELF文件的基本结构,允许操作系统和链接器正确加载和执行可执行文件或共享库。不同类型的ELF文件(可执行文件、共享库等)可能具有不同的结构和包含不同的节和表,但上述结构是通用的。

2023-09-07 11:10:05 185

原创 vmware ubuntu编译内核源码&内核驱动模块

vmware ubuntu编译内核源码&内核驱动模块

2023-08-29 16:13:12 1089 1

原创 python字符串理解和操作关键点

python字符串理解和操作关键点

2023-08-22 11:58:29 374 1

原创 windows和虚拟机linux上运行qemu

想在wsl ubuntu、vmwre ubuntu等虚拟机os中运行qemu,并能在qemu中再运行linux的os,这样就不用依赖物理的服务器上运行qemu,如果可以成功,就可以方便的修改扩展qemu的代码了。但是可惜没有正常运行起来。但是没有在网上找到支持x86_64的windows qemu的QEMU_EFI文件,按照同样的步骤安装x86_64版本的linux os没有成功。按照如下两个帖子的指导,可以安装arm架构的linux OS系统,并在windows上通过qemu虚拟机运行linux OS。

2023-08-18 10:28:07 1521 1

原创 如何取消Windows11的右键二级菜单

通过执行如下的命令并重启后,即可取消掉windows11的右键二级菜单,恢复成windows10之前的右键展示全部选项。windows11做了一些小的改进,比如资源管理器中右键时,将许多选项做了隐藏,需要点击“但这样有个缺点,就是常用的选项在二级菜单,总是要点“”才能选中,反而降低了效率。

2023-06-12 13:54:21 7641 2

原创 ARM compiler 5(DS-5 built-in)编译错误:Eorror:#28 exppression must hasve a constant value

只是编译脚本中执行目标文件./helloworld_dt.exe会报Segmentation fault,因为这个0x12000000地址是嵌入式ARM环境中的ram地址,在windows的Mingw环境中并不存在。单独去执行,没有报错,为什么?

2023-03-15 10:15:41 198

原创 centos7安装内核源码树-编译加载nvme-ko驱动

centos7安装内核源码树-编译加载nvme-ko驱动

2023-03-06 20:47:49 3870

原创 Linux编译内核自带模块的方法

Linux编译内核自带模块的方法

2023-02-15 10:45:41 181

原创 难以理解的C语言

make it easier to understand and cheaper to modify.

2022-12-13 22:11:46 178 2

空空如也

空空如也

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

TA关注的人

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