- 博客(21)
- 收藏
- 关注
原创 环境变量和本地变量
环境变量具有全局属性,通过子进程继承的方式使得子进程可以获得父进程的环境变量,且子进程继承得到的环境变量表是父进程的一个副本,并不是和父进程共用一个环境变量表,这样子进程修改环境变量就不会影响到父进程。内建命令:是由当前进程通过函数调用在本地直接完成的命令,如:cd,pwd。getenv("环境变量名") //获取环境变量的函数。export 环境变量名= 值 //设置环境变量。echo $name(环境变量名)//查看环境变量。环境变量是操作系统里保存的具有特殊用途的参数。
2024-09-13 22:57:29 259
原创 进程调度和进程切换
在我们调度进程时每一个进程都会分配到一定的时间由OS执行该进程,当该进程的时间片(10ms)执行完后,不管该进程有没有执行完都不在执行,转而执行下一个进程。
2024-09-09 15:08:37 242 1
原创 Linux下的系统接口(实时更新)
pathname:路径flags:文件的打开方式mode:文件的权限返回值打开成功返回值该文件的文件描述符,打开失败返回-1。
2024-09-09 09:45:29 1139
原创 linux进程的概念和pid
进程是参与分配资源(cpu,内存)得实体,比如打开qq,浏览器就是打开了进程。进程这么多,如何管理进程呢?在linux下进程通过PCB(task_struct)来管理进程。
2024-09-09 09:45:14 276
原创 vim的相关操作
正常普通命令模式控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入下,或者到插入模式只有在下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。末行模式文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+:即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入。
2024-04-23 21:38:53 756 2
原创 gcc,软硬链接和制作动静态库
我们在程序里使用的库接口在链接时会将调用函数处转换成库的起始地址+偏移量,所以在我们将动态库加载到内存当中时是可以在任意位置加载的,然后通过页表将虚拟地址空间和物理内存建立映射关系,但是在虚拟地址空间内会将动态库的起始地址存放在共享区里,2.在/etc/ld.so.conf.d/路径下创建一个.conf文件,将动态库的路径添加到该文件的内容中,一个.conf只能有一个路径。软连接本质上是创建一个新的文件,该文件有自己的inode,文件的内容是所连接文件的地址。静态库要以lib开头,.so结尾。
2024-04-23 09:13:35 506 1
原创 理解文件系统
物理内存我们可以看成是多个4KB的单元,每一个4KB也称为页框;因为文件在文件系统里存储的数据块是一个个4KB的单元,在磁盘上的文件也是被划分成多个4KB单元,每一个4KB也称作页帧;那么这样的话物理内存与磁盘文件进行数据交互时就以4KB为单位进行数据交换。4KB是啥意思呢?比如当我们要访问100字节时,读取的并不是100字节而是4KB,那么就会有人想,这不是访问变慢了吗?为什么不以要100字节就访问100节的方式?其实不然。
2024-04-19 19:52:26 883 1
原创 深入理解继承
注意:1.class默认是private继承,struct默认是public继承2.基类private成员在派生类中不可见指的是不可以在派生类中被访问3.protected成员在派生类里可以被访问,在类外不能被访问。
2024-04-05 09:36:39 619 5
原创 类的默认成员函数
在创建对象时传入的是对象的话,就采用拷贝构造进行构造,如果没有写拷贝构造编译器会自动生成一个默认拷贝构造,编译器默认生成的拷贝构造对内置类型采用的是一个一个字节的浅拷贝,自定义类型会调用它的拷贝构造。如果我们所写的类有空间的开辟则需要进行深拷贝,因为如果是浅拷贝的话,两个对象的指针就会指向同一块内存空间,在第一个对象调用析构函数后第二个对象的指针就会变成野指针,引发错误。如果没有写析构函数编译器会自动生成一个默认析构函数,编译器默认生成的析构函数对内置类型不做处理,自定义类型会调用它的析构函数构造。
2024-03-28 09:19:05 425 1
原创 c++入门
引用实际上就是给你给变量或常量或对象取别名,一个引用实体可以有多个引用,引用常量要加const,引用在底层也是用指针实现的,通过封装然我们使用起来更加方便。函数名前加上inline修饰就变成了内联函数,内联函数会在调用内联函数处展开,不会进行函数跳转,减少了建立栈帧的开销,提升效率。函数在声明或定义是为函数的指定参数提供一个缺省值,当我们调用该函数时如果没有传参则会使用提供的缺省值,否则就用实际给的值。注意,内联函数适用于短小的函数,因为在短小的函数中建立栈帧的消耗就显得比较突出。
2024-03-27 10:22:39 421 2
原创 权限的理解
在Linux下超级用户就是root,root账号基本可以做任何事,普通用户在某些方面则会受到权限不足无法执行指令的约束。那如果我们想要在普通用户下执行超出自己权限的命令是该怎么办呢?我们可以使用sudo来短暂的提升自己的权限,但是使用sudo的前提是我们的账户要在信任列表里。那该如何把自己的账户添加到信任列表里呢?当我们在root账户下执行vim /etc/sudoers命令后找到%wheel的位置,把%wheel那一行复制到下面一行,将%wheel改成自己的账户名即可。
2024-03-24 11:45:32 519 7
原创 进程的状态和优先级
进程其实就是该文件的task_struct(在可执行程序被加载到内存时创建)+可执行程序,简单来讲就是文件的属性+文件的内容。
2024-03-22 21:24:22 347 3
原创 磁盘文件你真的了解了吗?
磁盘由盘片,磁道,扇区,柱面和磁头等组成。结构上磁盘有多个盘片,一个盘片被分成多个磁道,每个磁道又有多个扇区,每个扇区都有很多的磁性质,每个扇区是512字节。当我们进行数据写入的时候,磁头就会向磁盘上写入二进制序列,由磁头磁化磁性介质产生磁场,然后就可以规定磁场弱的为0,磁场强的为1,从而就实现了对数据的写入。注:一般默认磁盘读取数据是4kb,这样的话即使磁盘扇区出现损坏,没有512字节也不会产生影响,这样也保证读取数据的稳定性。
2024-03-20 09:32:36 669 3
原创 理解虚拟地址空间,进程与虚拟地址空间的关系
虚拟地址空间的定义:虚拟地址空间其实就是操作系统对每一个进程都认为自己独自占有占有内存的一种假象,用来存放虚拟地址。虚拟地址空间的实现:通过对链表,红黑树的相关操作实现虚拟地址内空间这样的一个形式。虚拟地址空间的图示如上;在代码层面上虚拟地址空间其实就是一个mm_struct这样的一个结构体,结构体里面就用无符号整型对代码区,数据区,堆区,栈区的起始地址和结束地址进行了存储从而划分出来各个区域;介绍一下页表:页表就类似于数的k/v结构,可以通过k值来访问v值。
2024-03-19 23:23:19 338
原创 快速理解递归(保姆级教学)
递归就是将分治思想(将一个大的问题转化成若干个小问题)}的运用,用大白话讲就是一些代码多次使用。//这一部分就是上面所说的过程一。递归就是指一个函数多次调用自己。由递归结束条件和递归内容组成。}//前面这一部分是递归的结束条件。接下来我通过一个n!函数通过递归结束条件向前回退。
2023-11-19 13:04:30 156 1
原创 大学学习规划
3.再学习一段时间后写一写博客加深的知识的理解。在高中时接触过一些python,对编程产生兴趣,报志愿就选择了和编程相关的专业。2.坚持每天提交代码到gitee。我计划是在大一大二把c,c++和unity的相关内容熟练掌握运用。我期望经过大学的学习可以得到一份大型企业或者中型企业的offer。1.我计划每天都进行3-4个小时的编程学习。我将从以上几点来约束和激励自己。
2023-11-18 20:48:04 225 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人