
Linux的学习
文章平均质量分 76
初次接触Linux
阿^觅
这个作者很懒,什么都没留下…
展开
-
Linux - 进程间通信(3)
同一个文件的都是差不多的,因此不用再创建一份,操作系统不做浪费时间和空间的事情。创建了三个窗口,一个一直向管道输入,一个一直读取,一个手动检测管道大小。因为 FIFO0 文件虽存在于文件系统中,但其内容都存放在内存里,-- 则需要解决子进程所继承的父进程遗留的多余wfd,我们在。我们怎么保证两个毫不相关的进程打开了同一个文件呢?即可,就不会出现,多个wfd指向一个管道。当然,我们管理管道的声明周期时,肯定是。创建两个.cc文件分别模拟两个进程,命名:该管道有名字,因为。(当然,rm也可以删除)原创 2025-02-02 21:13:15 · 821 阅读 · 0 评论 -
Linux - 进程间通信(2)
就不会造成前面那种情况。原创 2025-01-28 13:30:02 · 793 阅读 · 0 评论 -
Linux - 进程间通信(1)
一个进程分别以读方式和写方式打开时,它会生成两份struct file结构体,当我们fork一个子进程时,子进程会将父进程的PCB和文件描述符表都拷贝一份,因为。d. 进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另 一个进程的所有陷入和异常,并能够及时知道它的状态改变。c. 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止 时要通知父进程)。--- 管道被写满,写条件不具备 --- wait 写条件具备(即读取)原创 2025-01-24 21:19:46 · 1149 阅读 · 0 评论 -
基础IO -- 动静态库(2)
ELF格式的可执行程序,二进制是有自己的固定格式的,固定格式里边一定要有自己的elf可执行程序的头部,0000 -- ffff(全0到全f的方式整体对所有的地址进行编址) ---- 平坦模式。2.加载 -> 每一行代码和数据,就都有了物理地址,自己的虚拟地址自己也知道,然后就可以。我们的可执行程序,编译成功,但是没有进行加载运行,二进制代码中有“地址”吗?-- 因此我们直接看源代码,不用加载运行,我们可以在我们的大脑中运行这个程序。动态库,因为动态库要在程序运行的时候,要找到动态库加载并运行。原创 2025-01-21 13:30:24 · 1034 阅读 · 0 评论 -
基础IO -- 动静态库(1)
我们的编译不是使用了我们的stdio和math库吗,为什么可执行文件中不包含?将这个mylib目录打包压缩给别人,别人就可以去使用我们写的这一个库。下面才是C++的标准库,上面的只是配置过Vim后显示出来的。那我们可不可以自己指定头文件的路径及名称?但是你会发现,当你拷贝到搜索路径后,并且。为什么不需要指定头文件名称呢?,gcc编译时还是会有报错提示。中的实现,来成功编译代码了。但是不能直接使用,而是需要。成.a类似静态库文件。原创 2025-01-17 22:13:45 · 1075 阅读 · 0 评论 -
基础IO -- 软硬链接
硬链接就是一个文件名和inode的映射关系,建立硬链接,就是在指定目录下,若是把目标文件删除掉,即类似于删掉.exe可执行文件导致软链接无效。这样会很麻烦,这时候就可以使用软链接来。任何一个目录,刚开始新建的时候,其就类似于Windows中的。目录A内部,新建一个目录,当我们将目标文件删除时,这时,引用计数变为了3。(也就是备份文件)。原创 2025-01-15 21:33:21 · 536 阅读 · 0 评论 -
基础IO -- 文件系统
将一个分区分为了若干个组:文件 = 内容 + 属性(本质也是数据)文件在磁盘存储,本质是:文件的内容+文件的属性数据Linux文件系统特点:文件内容和文件属性分开存储。原创 2025-01-14 12:17:51 · 1386 阅读 · 0 评论 -
基础IO -- 磁盘(1)
盘片 :可读可写可删除,一片两面都可以写,一面一磁头。原创 2024-11-01 12:22:59 · 448 阅读 · 0 评论 -
基础IO -- 标准错误输出stderr
这里我们谈一下以前只是了解过的stderr通过两段代码,显然,我们可以知道的对于重定向,中> : 全称叫做因此只会更改1号fd(即stdout)里面的内容,而打印。原创 2024-10-31 22:16:36 · 736 阅读 · 0 评论 -
基础IO -- 简单封装库(文件操作)
【代码】基础IO -- 简单封装库(文件操作)原创 2024-10-29 11:46:37 · 316 阅读 · 0 评论 -
基础IO -- 重定向 && 缓冲区
而重定向则是,write将数据直接写在内核级缓冲区内,而printf和fprintf写在stdout的缓冲区,因此一开始write就已经刷新到了log.txt,提高效率听起来有点扯,因为本来可以把数据直接写到操作系统里面,却要写到stdout的缓冲区中,这不是多此一举,,因此printf和fprintf还在stdout的缓冲区内未刷新,因此hello write先打印,而后。比如在寄快递,你把你的快递交给驿站,驿站再寄给你的朋友,,如果正常运行的话,则会一行一行的刷新出来。时,缓冲区刷新到内核里,这样就。原创 2024-10-24 09:12:58 · 1018 阅读 · 0 评论 -
基础IO -- 理解文件(2)
了,但是,原创 2024-10-19 12:44:20 · 823 阅读 · 0 评论 -
基础IO -- 理解文件(1)
以前学习过在C语言中的文件操作, 但那根本是不足以理解文件的,即站在语言角度是不可能理解文件的。像PCB一般,把一个文件打开就创建一个结构,然后将其用链表串起来,最后对打开文件的管理就。,什么都不写,此时这个文件会不会占据磁盘空间呢?---> 会的,因为其。一个进程是可以打开多个文件的,而系统内部也可以存在很多进程 ---> 因此。(因此可以大概猜到每一个被打开的文件,在OS内部,一定要存在。文件没有被打开的时候,那它存在哪里呢?2.若存在,默认打开文件的时候,就会先把目标文件清空。原创 2024-10-15 22:40:40 · 590 阅读 · 0 评论 -
Linux进程控制(3)(进程程序替换2 -- 微型shell)
然后由自己加了一个\n,因此换行了两次解决方法:把尾部的\n换成\0:(这里。原创 2024-10-13 10:01:07 · 675 阅读 · 0 评论 -
Linux进程控制(2)(进程程序替换1)
,原创 2024-10-04 20:32:32 · 1125 阅读 · 0 评论 -
Linux进程控制(1)(进程终止 -- 进程等待)
来知晓。原创 2024-09-26 13:06:13 · 879 阅读 · 0 评论 -
Linux中的调度算法
为什么是[5]呢,因为它为long类型,一个则为4个字节,4个就是4 * 4 * 8 = 128个比特位,,比如智能汽车里面必须装有这种实时操作系统,要不然如果刹车还需要经过时间片的话,就来不及了。这里只会使用它下标的100 -- 139,前面0 -- 99我们不考虑,,下标为120时,就会把前面的空位置全部遍历,导致效率下降。当一个优先级为60的进程入队列的时候,实际上就是。若下标为100处有进程,则第一百个比特位为1。,也就是40个数字,优先级为。nice值的范围有限,即为。本质上是一个数组,内部有。原创 2024-09-22 13:04:17 · 479 阅读 · 0 评论 -
进程的地址空间(虚拟地址)
地址空间就相当于区域划分计算机语言来描述就是:int start;int end;用小时候的三八线来描述就是,我有一段区域的start和end,同桌也有一段start和end地址空间的本质就是内核中的一个数据结构,内部很多属性都是表示start,end的范围。原创 2024-09-19 12:39:22 · 1687 阅读 · 0 评论 -
Linux进程(3)(进程优先级 - 优先级 - 命令行参数 - 环境变量)
优先级是指定进程获取某种资源的先后顺序task_struct 进程控制块->struct->内部字段 ->int prio =??(task_struct作为进程控制块,内部包含了多个不同的结构体和字段,其中某个特定的struct中包含prio字段,用于存储默认优先级数字)prionice在Linux中,优先级数字越小,优先级越高关于优先级与权限之间的联系:1.权限表示这个资源能不能获取2.而优先级则是这个资源已经能获取了,只不过是获取资源的顺序。原创 2024-09-16 01:11:39 · 1012 阅读 · 0 评论 -
Linux进程(2)(进程状态 - 僵尸、孤儿进程)
已经运行完毕,但是需要维持自己的退出信息,在自己的进程task_struct 会记录自己的退出信息,未来让父进程来进行读取。父进程如果先退出,子进程就会变成孤儿进程,孤儿进程一般都是会被1号进程(OS本身)进行领养的。直接在命令行中启动的进程,他的父进程是bash,bash会自动回收新进程的Z。CPU内部的数据,可以有多套,有几个进程,就有几套和该进程对应的上下文数据。入队列的不是进程的什么代码和数据 而是进程的task_struct。寄存器本身是硬件,具有数据的存储能力,CPU的寄存器硬件只有一套!原创 2024-09-12 16:17:49 · 892 阅读 · 0 评论 -
Linux进程(1)(结构-操作系统-进程)
所以凡是要对特定的对象进行管理:都是。原创 2024-07-05 17:09:11 · 1380 阅读 · 0 评论 -
Linux-gdb
gdb的使用及其常用指令原创 2024-07-03 21:20:41 · 377 阅读 · 0 评论 -
Linux进程状态
在Linux中,即使进程正在执行代码,它也可能会被标记为睡眠状态。这是因为在Linux系统中,进程的状态会根据其当前活动(或等待的事件)而不断变化。僵尸进程在系统中占用了进程表中的一个条目,如果大量的僵尸进程积累,可能会导致进程表耗尽,从而影响系统的性能。当一个子进程结束时,内核会保留一些关于该子进程的信息,包括其进程ID和终止状态,直到父进程通过调用。并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。,进程停止在这个点显示t(tracing stop)状态。来获取这些信息为止。原创 2024-03-14 17:28:02 · 537 阅读 · 0 评论 -
Linux调试器-gdb使用
生成的可执行程序中debug模式下的比release模式下的大,因为debug下的可执行程序中。set var x=100:强行给变量重新赋值(可能影响程序的运行结果):打印表达式的值,通过表达式可以修改变量的值或者调用函数。变量名:跟踪查看一个变量,每次停下来都显示它的值。info locals:查看当前栈帧局部变量的值。调试,必须在源代码生成二进制程序的时候。源代码,接着上次的位置往下列,每次列。disable 断点编号:禁用断点。:取消对先前设置的那些变量的跟踪。函数名:列出某个函数的源代码。原创 2024-02-14 21:56:41 · 379 阅读 · 0 评论 -
Linux环境中的git
(上述显示即为,有项目为同步本地与远程,需进行git push操作。push是会需要填写username与password,指令:sudo yum install -y git。git status命令可以查看当前git状态。先将下面两行代码分别复制粘贴在命令行,操作将先文件夹中的文件全部添加到本地;先将自己写的项目代码放入带有。操作,日志挺重要的,想好写;操作同步本地与远程仓库。这样就算是克隆成功了。,复制粘贴到命令行。原创 2024-02-14 21:16:03 · 895 阅读 · 0 评论 -
Linux编译器-gcc/g++的使用
以上就是gcc/g++的用法,我主要用。对于上图gcc命令中。原创 2024-01-28 16:46:46 · 258 阅读 · 0 评论 -
Linux中解决普通用户无法进行sudo授权
如何设置普通用户sudo提权原创 2024-01-23 10:49:59 · 725 阅读 · 0 评论 -
Linux中的编辑器vim
1.按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下。3.按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。注释:先ctrl+v,hjkl去进行区域选择,shift+i,然后//,最后。该模式是我们后面用的。原创 2024-01-23 10:40:06 · 1308 阅读 · 0 评论 -
Linux中的软件包管理器yum
●在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.●但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.●软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.●。原创 2024-01-21 18:17:46 · 1314 阅读 · 0 评论 -
Linux权限理解(2)
1.目录的可执行权限是表示你可否在目录下执行命令。2.如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)3.而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。原创 2024-01-21 17:57:35 · 403 阅读 · 0 评论 -
Linux权限理解(1)
●帮助理解:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫它王婆,它对应我们常使用的bash。,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。原创 2023-12-09 09:39:23 · 1069 阅读 · 0 评论 -
Linux的基本指令(4)
详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。-v :压缩的过程中显示文件!-r : 在将系统的服务停掉之后就重新启动。-h : 将系统的服务停掉后,立即关机。-x :解开一个压缩文件的参数指令!-c :建立一个压缩文件的参数指令。主机所用的操作系统的版本、硬件的名称等基本信息。-f :使用档名,请留意,在。具有『命令补全』和『档案补齐』的功能。后面加秒数,亦即『过几秒后关机』的意思。-z :是否同时具有。[Ctrl]-c按键。原创 2023-12-01 18:40:24 · 615 阅读 · 0 评论 -
Linux的基本指令(3)
在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。-j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数): 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份。-3 显示系统前一个月,当前月,下一个月的月历。-n :顺便输出行号。原创 2023-11-24 19:15:32 · 570 阅读 · 0 评论 -
Linux的基本指令(2)
cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它。原创 2023-11-24 18:33:25 · 1118 阅读 · 0 评论 -
Linux的基本指令(1)
F 在每个文件名后附上一个字符以说明该文件的类型,“*”表示可执行的普通文件;-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。-a 或--time=atime或--time=access或--time=use只更改存取时间。功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。-d 将目录象文件一样显示,而不是显示其下的文件。原创 2023-11-24 08:46:54 · 964 阅读 · 0 评论