
Linux系统编程
文章平均质量分 97
Linux操作系统是一个免费且开源的操作系统,它基于Unix操作系统。Linux最早由Linus Torvalds在1991年开发,之后成为计算机爱好者、开发者和企业的流行选择。
大耳朵土土垚
越努力,越幸运。
展开
-
【Linux】线程池封装与介绍
之前我们实现了线程、互斥量、条件变量以及日志的封装,现在我们可以基于以上内容来封装一个线程池。线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。线程池的应用场景:需要大量的线程来完成任务,且完成任务的时间比较短。比如WEB。原创 2025-02-04 14:45:06 · 1432 阅读 · 1 评论 -
【Linux】日志设计模式与实现
计算机中的日志是记录系统和软件运行中发生事件的文件,主要作用是监控运行状态、记录异常信息,帮助快速定位问题并⽀持程序员进⾏问题修复。它是系统维护、故障排查和安全管理的重要工具。原创 2025-01-31 17:06:10 · 1258 阅读 · 1 评论 -
【Linux】线程互斥与同步
以上就是有关线程互斥与同步有关的内容啦,线程互斥指的是多个线程访问公共资源,保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用;线程同步指的是在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题,叫做同步。以上就是今天所有的内容啦~ 完结撒花~ 🥳🎉🎉。原创 2025-01-30 22:37:42 · 1252 阅读 · 0 评论 -
【Linux】线程概念与控制
线程就是一个执行流,一个进程内可以有多个线程。进程是划分资源的最小单位,而线程(Thread)是操作系统能够进行运算调度的最小单位。通过对线程的各种函数的理解与认识,我们就可以封装便于理解和学习的线程库。原创 2025-01-23 18:51:29 · 885 阅读 · 1 评论 -
【Linux】进程信号
信号就像是一个突然的电话铃声,它会打断正在进行的程序并引起其注意。在Linux系统中,信号是一种软件中断,它通常是异步发生的,用来通知进程某个事件已经发生。每个信号都有一个唯一的编号和一个宏定义名称,这些宏定义可以在signal.h中找到原创 2024-12-23 21:17:33 · 2315 阅读 · 70 评论 -
【Linux】进程间通信——System V共享内存
System V是一种在Linux系统中用于进程间通信(IPC)的机制。它提供了几种不同的通信方式,包括共享内存、消息队列和信号量。System V共享内存是一种高效的进程间通信(IPC)机制,它允许多个进程共享一块物理内存区域,从而避免了数据的复制,显著提高了数据传输速率。原创 2024-12-08 20:54:33 · 1590 阅读 · 84 评论 -
【Linux】进程间通信——命名管道
匿名管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用命名管道来做这项工作。在Linux系统中,命名管道(也称为FIFO)是一种特殊的文件类型,它允许进程间进行通信。与匿名管道不同,命名管道存在于文件系统中,并且可以被任何有适当权限的进程访问。命名管道提供了一种方法,使得不相关的进程能够通过预先定义好的路径来交换数据。匿名管道由pipe函数创建并打开。而命名管道由mkfifo函数创建,打开⽤open。FIFO(命名管道)与pipe。原创 2024-12-03 19:19:13 · 2329 阅读 · 76 评论 -
【Linux】匿名管道通信场景——进程池
基于匿名管道通信实现的进程池,子进程会根据接受到的信息执行不同的任务,父进程可以看作Master来进行管理创建的多个进程。关键点在于对进程管理的封装以及回收子进程时会有多个进程指向匿名管道的读端,所以回收时要注意可能会出现的bug。原创 2024-12-01 16:09:38 · 1964 阅读 · 76 评论 -
【Linux】进程间通信——匿名管道
它的原理与上图类似,是通过pipe系统调用来创建一个管道文件,该文件与上图文件不同,没有inode,也不需要写入磁盘,仅仅用来给父子进程间进行通信,可以说是一次性使用的,没有名字,所以称为匿名管道。读进程从管道中读取数据,写进程向管道中写入数据。(某种形式的内存空间),并且因为进程具有独立性的特性,一个进程不能在另一个进程中操作某种资源,所以该资源的提供者不能是进程,只能是操作系统,这也是进程间通信的核心。管道的通信是单向的,即父进程或子进程不能对一个管道同时读和写,只能选择一个,父进程读,子进程就写;原创 2024-11-20 20:59:59 · 971 阅读 · 7 评论 -
【Linux】ELF可执行程序和动态库加载
在Linux操作系统中,通过elf格式的可执行文件,操作系统可以读取文件中的节和段信息,并加载到内存中执行。程序在调用动态库中的方法时会先将动态库的起始虚拟地址保存起来,然后将调用的方法转化为该方法在动态库中的虚拟地址偏移量,这样就可以根据。中,因为动态库加载可能多个也可能不加载,所有Linux使用了一种灵活的数据结构来保存动态库的虚拟地址,该结构体实际上是一个链表,链接在。程序加载到内存中,是会有物理内存地址的,页表的作用就是将程序物理内存地址与虚拟地址之间进行映射,而。原创 2024-11-13 21:13:00 · 1085 阅读 · 4 评论 -
【Linux】软硬链接和动静态库
在Linux系统中,文件链接分为两种类型:硬链接(Hard Link)和软链接(也称为符号链接或Symbolic Link)。它们都是用于创建文件的额外入口点,但是工作原理和使用场景有所不同。关于引用计数: 新建一个目录文件,它一开始的硬链接引用计数就是2,除了它自己以外,它里面还包含一个隐藏文件,这个其实也是该目录的硬链接,如下图所示:特性:创建方法:使用命令。例如,要为文件创建一个名为的软链接,可以执行命令 。使用场景:总结起来,软连接有独立的inode,软连接内容上保存的是目标文件的路径,当原创 2024-11-09 16:29:37 · 1331 阅读 · 6 评论 -
【Linux】理解文件系统
block 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。就必须先找到保存该文件inode的目录,然后根据inode编号去磁盘中寻找,但是目录也是一个文件,要想打开该目录必须得找到保存该目录inode编号的目录,以此类推一直找到根目录,而根目录的inode编号是固定的,所以我们就可以根据根目录的内容再往下一层一层找到。间接块中存储了多个数据块的编号。原创 2024-11-06 21:38:03 · 1001 阅读 · 3 评论 -
【Linux】第一个小程序——进度条实现
我们之前学习过vim编辑器、gcc/g++的使用和make/makefile工具,所以今天我们就可以使用它们创建Linux上第一个小程序——进度条。在实现进度条之前我们首先需要补充两个小知识。原创 2024-10-02 19:37:19 · 10627 阅读 · 113 评论 -
【Linux】深度解析与实战应用:GCC/G++编译器入门指南
在Linux系统中,GCC(GNU Compiler Collection)是极其重要且广泛使用的编译器,它支持多种编程语言,包括C、C++、Objective-C、Java、Fortran等。GCC以其高效、灵活和跨平台的特点赢得了开发者的青睐。本文将详细介绍GCC中的C编译器gcc和C++编译器g++的基本使用方法和编译过程。GCC(GNU Compiler Collection)是一个由GNU项目开发的编译器套件,原名GNU C Compiler,但随着发展,它已支持多种编程语言的编译。原创 2024-09-24 19:55:20 · 1956 阅读 · 111 评论 -
【Linux 】开发利器:深度探索 Vim 编辑器的无限可能
Vim有非常丰富的功能,可以根据具体需求进行扩展和定制。初学者可能需要一些时间来适应Vim的操作方式,但一旦掌握了Vim的一些基本操作,它将成为你在终端环境下高效编辑文本的利器。原创 2024-09-20 12:25:35 · 2242 阅读 · 116 评论 -
【Linux】软件包管理器 yum
在Linux中,软件包是一种以预定义的格式打包的软件安装文件,相当于我们在Windows下需要安装的app。它包含了软件程序的所有文件、依赖关系和安装脚本等信息。软件包通常以特定的格式(如RPM、DEB等)提供,可以通过包管理器(例如yum)来安装、升级和卸载软件包。原创 2024-09-18 16:54:28 · 1366 阅读 · 90 评论 -
【Linux】掌握Linux系统编程中的权限与访问控制
Linux权限是指对文件和目录的访问控制。每个文件和目录都有一个所有者和一个所属组,而且还可以赋予其他用户的访问权限。Linux权限控制了文件和目录的读、写和执行权限,通过设置不同的权限组合可以限制用户对文件和目录的访问。原创 2024-05-06 22:40:37 · 3865 阅读 · 93 评论 -
【Linux系统编程】基础指令(三)
在Linux中,echo指令用于在终端上显示文本或变量的内容。它的常见用法是将文本输出到终端或将文本写入文件。原创 2024-04-28 13:45:29 · 3615 阅读 · 117 评论 -
【Linux系统编程】基础指令(二)
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。原创 2024-04-26 17:02:10 · 2140 阅读 · 26 评论 -
【Linux系统编程】基础指令(一)
先使用pwd指令查看当前所在目录是root下的code文件夹中,然后通过ls -l指令查看当前code文件夹中的文件与子目录,然后再通过touch tutu.txt指令创建一个文件名为tutu的文本文件;如上图所示我们首先通过ls -l指令查看当前目录下的所有文件与子目录发现有code子目录,我们再通过cd code进入当前目录下的code子目录中,最后通过ls -l查看了code文件中的所有文件与子目录;以上例子说明ls -l指令不仅列出了该目录下所有的子目录与文件还列出文件的详细信息;原创 2024-04-24 12:19:53 · 1288 阅读 · 14 评论 -
【Linux系统编程】Linux背景知识
Linux的一个主要优势是其可定制性。用户可以自由修改和定制操作系统以适应他们的需求。此外,Linux以其稳定性和安全性而闻名,这使其成为服务器和其他关键系统的热门选择。原创 2024-04-23 13:41:18 · 2645 阅读 · 23 评论