![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 95
Dio夹心小面包
"放弃学习的我们是没有翅膀的雄鹰 不会理智的我们是根茎腐烂的大树"
展开
-
『 Linux 』简要介绍System V IPC 消息队列 && 信号量
获取/创建 一个消息队列获取/创建一个消息队列通常使用msgget()系统调用接口;NAMESYNOPSIS返回值为int类型,与System V共享内存相同,当该系统调用接口调用成功时将返回一个msqid用于对消息队列的具体操作;调用失败时返回-1并设置errno;key_t key与共享内存相同,传入一个key值使多个进程可通过该key值看到同一份资源(消息队列);该参数可用户自定或是通过调用系统调用接口ftok()进行传入(ftok()系统调用接口不赘述);int msgflg。原创 2024-07-21 20:38:20 · 745 阅读 · 0 评论 -
『 Linux 』System V共享内存
共享内存的直接原理即由操作系统内核申请出一块物理内存空间,并将该空间的使用权移交给多个进程,即将该空间以挂接至多个进程的进程地址空间中使得多个进程可以同时访问同一块内存空间。当需要释放共享内存时在此之前需要使得该共享内存没有再被某些进程进行关联,确保进程的读写操作不会因为共享内存的释放而发生读写错误;该参数为一个结构体,该结构体包含了共享内存的所有属性,可通过该结构体对共享内存进行获取属性,查看属性,修改属性等操作;当共享内存被创建后需要将共享内存挂接到进程地址空间中,即使进程与该共享内存进行关联;原创 2024-07-20 15:50:06 · 682 阅读 · 0 评论 -
『 Linux 』简单日志插件
日志(log)是一种记录和存储系统运行状态,事件,和操作历史的文件和数据库,这些记录通常以时间顺序排列且详细记录系统中发生的各种活动;系统日志记录操作系统级别的事件,如启动,关机,错误和警告等;记录应用程序运行过程中的事件,如用户操作,错误,状态变更等;安全日志记录系统和应用程序的安全相关事件,如登录尝试,权限变更等;问题诊断和故障排查日志可以帮助系统管理员和开发人员诊断和解决问题;系统监控和维护通过分析日志,管理员可以监控系统的运行状态并且识别潜在的问题和异常;安全审计和合规性。原创 2024-07-17 18:38:58 · 1045 阅读 · 0 评论 -
『 Linux 』命名管道
两个毫不相关的进程,其中一个进程用来创建管道文件并维护管道文件,同时负责接收另一个进程向管道文件内写入的数据;命名管道不占用实际磁盘空间,只是用于传输,不存在刷盘(写入磁盘)的动作,故实际上使用的也是该文件的内核缓冲区;创建一个管道类用于管理管道文件,即利用其构造函数创建管道文件,在退出后析构函数释放对应管道文件;当管道内的数据没有被读端读取时写端会进行阻塞等待读端将当前管道内的数据进行读取;模拟实现服务端,用于管理命名管道文件,接收管道内文件并进行打印;命名管道是管道的一种,数据流向为单向故被称为管道;原创 2024-07-15 19:14:59 · 919 阅读 · 0 评论 -
『 Linux 』匿名管道应用 - 简易进程池
当一种资源需要被使用时这意味着这个资源可能会被进行多次使用或者需要同时使用多个该资源,当出现这种情况时内核将会频繁的对该资源进行申请并释放,大大降低整体的效率;整体构造采用先描述后组织的方式对进程池进行设置,并以自顶向下的方式进行设计,即先将所需接口以声明的形式标出而后再对接口进行具体实现;本文模拟实现的进程池通过多个匿名管道实现进程间通信使得一个进程与多个其对应的血缘关系进程进行协同从而形成一个进程池[父写子读];子进程为父进程的一份拷贝,当父子进程中其中一个进程被修改时(即对物理内存进行修改);原创 2024-07-13 22:41:13 · 968 阅读 · 0 评论 -
『 Linux 』 进程间通信 - 匿名管道 (万字)
管道(Pipe)是一种基本的进程间通信(IPC)机制,允许一个进程与另一个进程之间进行数据传输;管道工作方式类似于生活中的水管因此命名为管道,数据从一端流入另一段流出,数据流为单向;Linux中可以使用查看当前登入系统的用户数;who命令用与显示当前登入系统的用户信息,其中一条会话代表一个用户;wc -l命令统计当前行数;两条命令通过管道符进行连接,即将显示的信息通过管道符传输给wc命令再进行统计行数;符号即为一种管道;匿名管道(Anonymous Pipes)不存在命名的管道,用于。原创 2024-06-21 16:57:08 · 1011 阅读 · 0 评论 -
『 Linux 』 进程间通信概述
进程间通信(IPC)指的是在操作系统重,允许两个或者多个进程之间传递信息或者数据的机制;进程是操作系统重独立运行的实体,即进程间具有独立性,存在自己的地址空间;因此进程间默认无法直接访问彼此的内存空间,其通信成本会较高;IPC提供一种方式使得互相独立的进程能够交换数据并进行通信和数据共享;原创 2024-06-20 16:45:52 · 740 阅读 · 0 评论 -
『 Linux 』 进程地址空间与动态库地址
当可执行程序被加载进内存成为进程时,操作系统将会给这个寄存器中存放这个进程代码的初始位置(虚拟地址 ),例如程序的入口点;为了使不同的进程能够同时使用同一份物理内存的库副本,库中的代码必须能够运行在任何地址上即它们必须是与位置无关的;这是通过确保代码执行时不依赖它的绝对地址来实现的,即代码对于数据的禁用是基于它当前的运行地址来计算的;目标文件最终被生成的动态库其中的地址将可以加载到物理内存中的任意位置,并随机为其分配进程地址空间;如,它可以避免为每个使用特定库的进程单独加载库的副本从而节省内存资源;原创 2024-06-14 13:26:37 · 993 阅读 · 1 评论 -
『 Linux 』动态库的加载
动态库和静态库是软件开发中两种主要的代码库链接方式;其中动态库在程序运行时被加载并允许代码在物理内存中只有一份拷贝而被多个进程共享从而减少系统资源的消耗;相比之下,静态库在程序编译时被整合进可执行文件;导致每个程序都包含了一份库的副本,增加了程序的大小和内存占用;动态库的管理依赖于操作系统中的结构体,如link_map;它记录了库的加载地址,名称等信息,确保动态链接和库间依赖关系的正确处理;通过高效地管理和加载动态库,系统能够提高内存使用效率,简化库的更新过程,并支持跨进程的库共享;原创 2024-06-13 17:39:18 · 799 阅读 · 0 评论 -
『 Linux 』动静态库的创建与使用 ( 万字纯干货 )
在某些情况下,如果用户只提供了静态库而没有提供对应的动态库,链接器将不得不使用静态链接.但这也取决于编译时的具体指令和可用的库;同样类似于标准库的库文件也已经在系统中被安装,若是没有指定目录则会去默认路径(当前路径或是系统安装库文件的目录)中查找;静态库在编译时已经被链接到可执行文件中,故运行时不需要动态加载库文件,因此启动速度较快,运行时性能较好;静态库在编译时被嵌入到应用程序中,因此生成的可执行文件不依赖于外部的库文件;目标用于删除所有编译生成的文件,包括静态库,动态库,目标文件以及发布后的。原创 2024-06-13 00:34:38 · 740 阅读 · 0 评论 -
『 Linux 』内存管理与文件系统
页是虚拟内存中的一个固定大小的块,时进程地址空间中的最小单位;原创 2024-06-06 17:23:52 · 957 阅读 · 0 评论 -
『 Linux 』目录与软硬链接 (万字详解)
根目录也是一个目录,也是一个文件,在文件系统中有自己的Inode编号和属性,通常在创建一个文件系统时会创建对应的根目录,并在其InodeTable表中维护根目录的Inode信息;如果在Dentry缓存中找到目录项,文件系统可以直接使用缓存中的Inode编号找到对应的Inode信息从而无需从磁盘中重新依次读取目录项;在目标目录中创建一个新的目录项(dentry),将新文件的名称与分配的inode关联起来;目录是文件,其Inode中的指针数组中数组中指针指向的数据块中存放的数据为目录项;原创 2024-06-04 15:33:45 · 935 阅读 · 2 评论 -
『 Linux 』文件系统
文件元数据主要保存在Inode中。Inode,也被称为索引节点,是Unix和类Unix操作系统中的一种数据结构,它用于存储有关文件系统上的文件的元数据,但不包含文件名或数据内容。每个文件都有一个与之关联的Inode,包含了文件的大小、文件的所有者和权限信息、文件的创建、访问和修改时间等信息。原创 2024-06-01 19:21:39 · 1077 阅读 · 1 评论 -
『 Linux 』缓冲区(万字)
缓冲区(Buffer),顾名思义就是一块可以用于缓存的空间;也可以说实际上缓冲区是一种临时存储区域,一般用于在数据传输过程中对数据的缓存;缓冲区的主要目的是协调数据产生者和消费者之间的速度差异以提高系统的效率和性能;那么具体什么是缓冲区?存在几个例子:下文中所出现的例子都将使用两种方式(直接运行 ,重定向至文件当中)以便于区分两种情况的不同之处;[例1]// C标准库接口// 系统调用接口return 0;在这段代码当中分别用了C标准库接口与系统调用接口分别对不同的massage。原创 2024-05-31 17:10:04 · 759 阅读 · 0 评论 -
『 Linux 』“ 一切皆文件 “
同时,通过设备文件和文件操作表的抽象,使得不同的硬件设备能以一致的接口暴露给用户空间的程序,大大提高了程序的可移植性;驱动程序是系统内核的一部分,是一种较为特殊的软件,负责管理和控制特定的硬件设备,当用户空间的程序通过设备文件发起请求时,相应的驱动程序会接收到这个请求并执行必要的操作以与硬件设备进行交互;目录当中的特殊文件,代表系统中的硬件设备,这些文件为用户空间的程序提供了一个接口,用户可以通过这些接口程序给驱动程序发送请求,从而间接的调用硬件;操作系统会打开请求的设备文件;原创 2024-05-16 16:56:11 · 1017 阅读 · 0 评论 -
『 Linux 』重定向 Redirect(万字)
重定向是计算机编程和操作系统重的一个概念;一般指的是改变数据流的方向或将程序的输出从一个位置转移到另一个方式;一般在shell当中的重定向有标准输出重定向标准错误重定向标准输入重定向在博客『 Linux 』进程替换( Process replacement ) 及 简单Shell的实现(万字)当中实现了一个简易的Shell;但总体来说,这个简易的Shell写的并不好;无论是从代码结构,可读性,拓展性等等;1024// 命令行缓冲区大小3233// 获取环境变量为标识符/**/原创 2024-05-14 15:41:08 · 467 阅读 · 1 评论 -
『 Linux 』基础IO/文件IO (万字)
在计算机当中,I/O即为输入和输出的英文缩写版,;而在计算机当中,任何与输入输出有关的操作都可以被称作为IO,例如简单的对于设备上的将信息以打印的方式在显示屏(终端)中进入显示或者是在文件的读写操作都可以被看成是一种IO行为;一般在计算机系统当中,IO基于硬件层面的IO基于软件层面的IO网络IO设备IO内存IO标准输入/输出数据库IO进程间通信本篇博客以CentOS7.6为例。原创 2024-05-07 13:32:43 · 823 阅读 · 1 评论 -
『 Linux 』进程替换( Process replacement ) 及 简单Shell的实现(万字)
而在进程替换当中可以完美的对上面的理论进行一个反驳,即并不是每个程序加载到内存当中都会新生成一个对应的进程;以该图为例,该图中一个正在执行的进程经过了进程替换,将磁盘中的程序的代码和数据加载到了被替换的进程对应的。表示要执行的可执行文件的名称,该参数可以是一个简单的文件名而不需要包含完整的路径;该函数的功能为执行指定的路径下的可执行文件,并用传递给它的参数替换原有的程序;表示要执行的可执行文件的名称,它可以是一个简单的文件名而不需要包含完整的路径;原创 2024-03-14 20:30:20 · 1121 阅读 · 3 评论 -
『 Linux 』Process Control进程控制(万字)
进程控制是一种在操作系统上对进程进行管理和调度的一个过程;这包括创建进程,终止进程,等待进程,暂停和恢复进程,进程间的通信和调度进程等待;在之前关于Linux的内容中谈论了大量的关于进程的内容;本文将重点对于基础进程控制进行一定的讲解;原创 2024-03-07 23:40:51 · 990 阅读 · 0 评论 -
『 Linux 』重新理解挂起状态
挂起状态相比于其他状态来说,挂起状态与CPU并没有太直接的关系;在计算机的磁盘当中,存在着一个swap分区,这个分区就是为了当内存不足时使进程状态转化为挂起状态而准备的;在队列当中的进程不仅仅是PCB结构体,由于各个进程要通过使用资源来操作自身的代码及数据可以得知一个进程中除了PCB结构体以外还包含着对应的代码以及数据;原创 2023-12-14 21:26:51 · 532 阅读 · 16 评论 -
『 Linux 』进程地址空间存在的意义
在文章『 Linux 』进程地址空间概念中提到了进程地址空间的部分概念;这部分概念主要围绕进程地址空间到底是什么;在实际中,进程地址空间是一个进程的数据结构,这个数据结构的作用是模拟出虚拟地址;当一个进程需要访问物理内存时必须经过进程地址空间获取其虚拟地址通过页表找到页表中所映射的物理地址,才能对需要的物理地址中的数据进行操作;这样的操作流程一定程度上保证了进程间与物理内存的安全性;原创 2023-12-13 17:05:40 · 230 阅读 · 7 评论 -
『 Linux 』进程地址空间概念
在c/C++中存在一种内存的概念;一般来说一个内存的空间分布包括栈区堆区代码段等等;且内存是自底向上(由0x00000000至0xFFFFFFFF以该图为例:该图即为常见的内存分布图;正文代码段正文代码段所存放的数据一般为函数体的二进制代码;已初始化数据区已初始化数据区所存放的数据是在程序中声明的,并且具有初始值的变量,这些变量需要占用存储器的空间;未初始化数据区未初始化数据区所存放的数据是没有进行初始化或者初始值为0的数据,这些数据在存储时不需要额外占用存储器的空间;堆堆空间一般为动态空间。原创 2023-12-12 10:16:42 · 391 阅读 · 26 评论 -
『 Linux 』环境变量
在c/C++当中,根据不同程序的需要,我们需要为该程序定义某些变量int _data;这些变量本质上就是一段内存空间,用来存储程序需要的值或数据;而在OS中,OS本身在运行当中也需要一些必要的值或者数据,所以在OS当中也会存在一些变量用来存储这些所谓必要的值或者数据参数;本质上来说环境变量(environment variables)一般是指操作系统中指定操作系统运行环境的一些参数;PATH指定命令的搜索路径;HOME指定用户的主工作目录(即用户登陆到Linux系统当中时的默认路径);原创 2023-12-02 00:18:20 · 512 阅读 · 18 评论 -
『 Linux 』进程优先级
优先级,顾名思义,即在同一环境下不同单位对同一个资源的享有顺序;一般优先级高的单位将优先占有该资源;在进程当中进程与进程之间也同样具有优先级,以占用CPU资源为例,其优先级高的进程将优先享有使用CPU资源的权力;在计算机当中,由于CPU是有限的资源,当同时存在较多进程时将会需要以某种特定的方式竞争以使得能够优先对该资源进行使用,不仅是CPU,例如磁盘资源等都是有限的;本质上进程中的优先级只是其进程的PCB结构体中的某个属性调度器通过进程的优先级属性判断这个进程是否能优先占用某些资源;原创 2023-11-28 23:34:59 · 222 阅读 · 4 评论 -
『 Linux 』僵尸进程与孤儿进程
僵尸进程在维持僵尸状态的同时将会一直维护其PCB结构体,若是系统中存在大量的僵尸进程将会严重的占用内存资源;将一个子进程在运行时,其父进程若是在子进程结束之前先结束,这个子进程将会成为孤儿进程;,可以将这个进程理解为操作系统,统称一个进程的父进程死亡后其将变成孤儿进程,而它的。读取到了它的僵尸状态,将会进行一定的操作对其进行回收,此时这个进程将。在该子进程的父进程结束后子进程将继续运行,并继续进行打印;从上面的代码段可知,当父进程被结束后,其子进程的。而僵尸进程的概念即为,当进程退出时其并。原创 2023-11-28 16:49:15 · 228 阅读 · 3 评论 -
『 Linux 』使用fork函数创建进程与进程状态的查看
在『 Linux 』进程概念中了解到了操作系统对于进程的管理也是使用了"先描述后组织的方式ps只能查看当前渠道内的进程,若是需要查看所有进程应该加上修饰,即使用来查看进程;top命令更像是Windows下的任务管理器,一般用来观察内存当中占用较大的那个进程;ls /proc使用ls命令以目录的形式来查看进程;原创 2023-11-22 00:19:35 · 282 阅读 · 15 评论 -
『 Linux 』进程概念
而若是在计算机当中添加存储器后,可以使得外设中的数据通过操作系统率先load(加载)至存储器中,而又由于存储器与CPU的读写速度相差跨度并不是特别大,所以当数据加载至存储器当中CPU可以直接访问存储器从而加快计算机整体的速度;当然这句话说的并不全面,对于"当一个程序被运行时,必须将改程序先加载到内存当中",事实是如此,但这仅仅只是以硬件的角度进行观察,真正意义上来说,当一个程序被运行起来之后,它将被加载进内存成为进程的一部分,而操作系统通过进程管理可以完成对这个进程的资源管理;原创 2023-11-10 18:30:14 · 385 阅读 · 4 评论 -
『Linux』GDB调试
GDB 是由 GNU 软件系统社区提供的调试工具,同 GCC 配套组成了一套完整的开发环境,GDB 是 Linux 和许多类 Unix 系统中的标准开发环境。这正是因为,在使用gcc/g++进行编译链接所生成的可执行文件默认是release版本的,无法进行debug调试;如果设置了断点,程序会在断点处暂停,并显示当前的源代码和寄存器值;在main函数的第1行的位置设置断点(以此类推,所有的函数都可以像这样进行断点设置)设置断点:可让被调试的程序在所指定的调置的断点处停住,断点可以是条件表达式。原创 2023-10-11 01:18:41 · 149 阅读 · 2 评论 -
『Linux工具之』yum
yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。原创 2023-10-11 00:55:14 · 127 阅读 · 1 评论 -
『Linux小程序』进度条
对于输出缓冲区来说一般是不会造成溢出的,当输出缓冲区到达一定的量时将会强制进行刷新,并将新数据写入进输出缓冲区;这次并不会每次都进行换行,而是每次进行回车,同时内容也将重新覆盖,从而得到一个类似于倒计时的功能;但是其实来说,换行与回车是有区别的,对于换行来说,单换行并不能使光标回到最开始的位置;在c/c++中也是如此,‘\n’将会默认为 换行+回车 ,即’\n’ + ‘\r’;每次都会打印数据并进行换行回车,因为这里使用了endl,其功能与’\n’相同;当讲cout换成 ‘\r’ 时则什么都不会打印;原创 2023-10-11 00:13:18 · 393 阅读 · 3 评论 -
『Linux项目自动化构建工具』make/Makefile
如题可知,make/Makefile为在Linux下的项目自动化构建工具;在上一篇文章中讲解了C/C++程序的翻译过程;而make/Makefile即可以看成,是Makefile在使用gcc/g++使在Linux环境下能够更好的高效率的进行项目构建;首先,make是一条命令,也可以说通过make命令可以解析Makefile文件;而Makefile是一个文件,是用来告诉make命令该如何编译工程,生成可执行程序;原创 2023-10-10 22:24:19 · 531 阅读 · 2 评论 -
『Linux - gcc / g++』c程序翻译过程
在计算机中的每一个程序是由代码变化而来的,但是事实上来说,用 c/C++ 写出的代码是不能被计算机识别的,其中必须经过一系列的过程才能使这个代码能成功的被计算机识别;这几个过程分别为:预处理编译汇编链接在经历过这几个过程之后才能将代码转换为一个可执行程序;原创 2023-10-10 20:11:03 · 602 阅读 · 3 评论