11 2024 档案
摘要:动静态库 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库,但是,多个程序使用相同的静态库时,每个程序都会包含一份库的代码,可能会导致可执行文件体积较大。 动态库(.so):是在程序运行时被加载的库。当一个程序链接了动态库,在程序启动时,操作系统的动态
阅读全文
摘要:文件系统 在理解文件系统之前,我们先来看一下关于磁盘方面的内容。 磁盘的存储结构 盘面: 一个磁盘由多个盘片组成,每个盘片都由两面,它的每一个面都可以存储数据,这就是盘面。 磁道: 在一个盘面上会被划分为一个一个的“圈”,这个“圈”就对应这一个个的磁道。 扇区: 从盘面中心开始,延伸出两条线,在这两
阅读全文
摘要:缓冲区的理解 先来看这段代码 #include <stdio.h> #include <unistd.h> #include <string.h> int main() { //C接口 printf("hello printf\n"); fprintf(stdout, "hello fprintf\
阅读全文
摘要:基础IO 空文件也要在磁盘占据空间。 文件 = 内容 + 属性。 对文件操作 = 对内容 + 对属性的操作,或是对内容和属性的操作。 标定一个文件,必须使用:文件路径 + 文件名。(可以表示唯一性) 如果没有指明对应的文件路径,默认是在当前路径进行文件的访问。 当我们把fopen,fclose,fr
阅读全文
摘要:一个简单的shell实现 什么是内建命令 内建命令是由shell本身提供的命令,而不是通过外部程序(如位于/bin、/usr/bin等目录下的可执行文件)来执行的命令。这些命令在shell启动的时候就加载到内存中,执行效率相对较高。 常见的内建命令有:cd,pwd,echo。 什么是当前路径 本质就
阅读全文
摘要:继承 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员。 基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。无论派生出多少个子类,都只有一个static成员实例。 什么是继承 继承是面向对象编程(OOP)中的一个重要概念,它是一种创建新类(称为派生类或子类)的机制,新
阅读全文
摘要:exec系列函数 exec系列函数是用来进行程序的替换的。 替换原理 当使用fork函数创建子进程后,子进程会执行与父进程相同的代码(但也有可能执行不同的代码分支),子进程会通过调用exec函数来执行另一个程序。当调用exec函数时,会用新程序的代码和数据来覆盖当前进程的代码和数据(也就是写时拷贝,
阅读全文
摘要:进程控制 进程创建 fork函数 作用 fork函数的作用是用来创建一个新进程,新进程被称为子进程,而原来的进程称为父进程。 返回值 fork函数有两个返回值,给父进程返回子进程pid,给子进程返回0。 为什么有两个返回值? 在执行fork函数的时候,当fork函数的核心逻辑已经执行完成,准备ret
阅读全文
摘要:进程地址空间 以32位机器为例 程序地址空间 地址空间描述的基本空间大小是字节,每个字节都要有为一的地址,所以在32位的机器下就会有2^32次方个地址,也就是4G的空间范围。这些空间被划分成为了一个个区域。范围是 0x00000000 - 0xFFFFFFFF 我们知道,在一个程序中变量或函数的地址
阅读全文
摘要:环境变量 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内预先设置的一大批全局变量。 常用的环境变量 PATH:指定了操作系统在查找可执行文件时搜索的目录列表,目录之间用冒号:分隔。当在命令行中输入一个命令时,操作系统会在PATH中列出的目
阅读全文
摘要:进程 什么是进程 一个运行起来的程序就是进程。程序的本质是一个文件,它存储在磁盘中,而进程是已经被加载到了内存的程序。 进程 = 内核数据结构 + 进程对应的代码。 如何管理进程 当有多个程序被加载到内存,被CPU执行的时候。操作系统为了管理(管理的本质逻辑逻辑都是:先描述,再组织。描述:是指将某些
阅读全文
摘要:gdb基本使用 前提 gcc/g++编译出的程序默认是realease版本,要使用gdb调试,首先要在编译的时候加上-g选项。 使用readelf -S [程序名]查看可执行文件的节区信息。 使用 gdb [程序名]:开始调试。 q:退出调试。 list/l [行号]:从给定的位置显示程序的源代码,
阅读全文
摘要:git基本使用 .gitignore 它是一个文本文件,用来指定在提交的时候应该忽略那些文件和目录,避免不必要的文件被追踪,提高克隆和操作的效率。 .git 所谓的git仓库本质上就是一个目录,.git就是一个本地的仓库,它包含了所有的版本控制信息。可以定期将本地仓库推送到远程仓库。 git clo
阅读全文