![](https://img-blog.csdnimg.cn/3b6741e354ae4722b6194954f9f8d6ef.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux系统编程
文章平均质量分 83
本栏内容收录Linux系统编程内容,为初学者熟悉且能够熟练使用Linux。
风君子吖
目前大二,学习C++方面知识
展开
-
高级IO_多路转接之ET模式Reactor
Reactor模式是一种事件驱动的并发模型,它通过将事件处理逻辑与事件分发机制解耦,实现高性能、可扩展的并发处理。Reactor模式适用于大量短时连接或需要高效I/O处理的场景,如Web服务器、聊天服务器等。所以对于ET模式而言,就需要逼服务器一次性将所有缓冲区数据全部读完,也算是逼着你效率提高。今天我们所实现的Reactor是基于ET模式下的多路转接模式。以我们的epoll为例,我们的epoll默认是LT模式。ET模式:只有事件从无到有,从少到多的情况,才会提醒。LT模式:只要有事件就绪,就会不断提醒。原创 2024-07-07 04:38:52 · 355 阅读 · 0 评论 -
高级IO_多路转接之epoll
今天我们所要学习的epoll作为多路转接的后起之秀,会弥补之前所讲的select和poll的所有缺点,可以说从思想上,epoll与select、poll完全不同。原创 2024-07-05 00:20:45 · 551 阅读 · 0 评论 -
高级IO_多路转接之Poll
上一章我们学习了select,但是select作为早期的多路转接接口,缺点十分明显,于是又出现poll和epoll等接口,今天我们就来学习一下poll的使用提示:以下是本篇文章正文内容,下面案例可供参考poll相比较于select,弥补了两个缺点。不再需要繁琐地更新需要关心的fd和其对应事件。可关心的fd数量不再受其接口内置的数据结构大小限制,可以根据用户需求自由调整。但是仍然还有缺点,那就是每次进行一次poll都是一次从用户态拷贝数据到内核态的过程。原创 2024-07-04 15:04:11 · 375 阅读 · 0 评论 -
高级IO_多路转接之select
关于IO,我们已经用过了不少IO接口,从最简单的printf、scanf->C语言文件接口fprintf、fscanf->系统文件接口read、write->再到我们的系统网络套接字接口send、recv。这些接口见证了我们的学习历程,但是这些接口真的就只有读写吗?不光有读写,还有等。就像是我们使用scanf的时候,需要我们去输入一些字符,程序才能继续运行,否则就会一直阻塞住,这就是等的过程。实际等的过程,其实也可以理解为,等待资源准备就绪的过程。而当等的时候,该线程。原创 2024-07-04 00:17:58 · 1135 阅读 · 0 评论 -
Linux系统-前台任务组,后台任务组
通过上述的知识内容,我们是否可以创建一个不会受任何终端影响的进程,只要我们的云服务器不关机,这个进程就不会被终止!这就是下一节课进程守护的内容,我们基于上节课的翻译字典服务再添加上上进程守护的功能。原创 2024-06-02 14:12:43 · 719 阅读 · 0 评论 -
Linux-线程池
线程池主要是对之前内容的一个巩固,并且初步了解池化概念。原创 2024-05-19 01:31:05 · 605 阅读 · 0 评论 -
生产消费者模型-环形队列与信号量
之前我们使用互斥锁和条件变量实现过一个生产者消费者模型,那么那个生产消费者模型具有一个缺点那就是只能串形生产与消费。在某些环境与需求下,我们可以拥有比较大的数据空间,且我们的数据是批次分布在该空间中,我们是否可以让生产与消费并行呢?通过环形队列我们其实是可以实现的,并且我们本次学习尝试学习认识和如何使用信号量。信号量的本质其实就是一个计数器,他分别具有P操作和V操作,其中P操作可以简单的理解为计数器–,V操作可以简单的理解为计数器++。原创 2024-05-15 00:46:41 · 380 阅读 · 0 评论 -
Linux-使用阻塞队列实现生产者与消费者模型
参照日常生活中,购买商品的人群可以被称之为消费者,生产商品的工厂可以被称之为生产者,而在两者之间还存在超市被称之为交易场所。它们还存在三种关系,生产者与生产者之间是互斥关系,消费者与消费者之间也是互斥关系,消费者与生产者存在互斥/同步关系。这三种关系在多线程有着重要体现,通过我们之前所学习的互斥锁和条件变量可以反映这三种关系。今天我们就需要用我们的多线程知识来构建一个简单的生产者与消费者模型。原创 2024-03-23 10:03:22 · 334 阅读 · 0 评论 -
Linux-线程同步
上节课学习了线程互斥,这节课针对线程互斥内容在做进一步的补充和完善,学习线程同步的概念。提示:以下是本篇文章正文内容,下面案例可供参考。原创 2024-03-19 09:40:50 · 991 阅读 · 0 评论 -
Linux - 线程互斥和互斥锁
前几节课,我们学习了多线程的基础概念,这节课,我们来对线程互斥和互斥锁的内容进行学习。原创 2024-03-17 07:45:24 · 817 阅读 · 0 评论 -
Linux-多线程2 ——线程等待、线程异常、线程退出、线程取消和线程分离
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2024-03-13 01:12:26 · 991 阅读 · 1 评论 -
LInux-多线程基础概念
从本章的多线程开始,我们开始进入Linux系统的尾声,所以,在学习多线程的过程中,我们也会逐步对之前的内容进行复习,以达到知识巩固的效果。原创 2024-03-07 17:18:17 · 1035 阅读 · 0 评论 -
Linux-信号3_sigaction、volatile与SIGCHLD
本章内容主要对之前的内容做一些补充。提示:以下是本篇文章正文内容,下面案例可供参考。原创 2024-03-04 19:25:08 · 1095 阅读 · 1 评论 -
Linux-信号2
上节课我们学习了信号产生到处理过程的现象以及信号的捕捉,这节课主要学习信号的保存。我们需要熟练使用以下函数。原创 2024-02-29 00:56:20 · 938 阅读 · 0 评论 -
LInux-信号1
本章主要讲信号的产生与处理以及信号的作用,再延展出core dump的相关概念,信号对于进程十分重要。原创 2024-02-22 03:09:32 · 913 阅读 · 0 评论 -
Linux-共享内存
在这之前我们已经学习了两种进程间通信方式:匿名管道和命名管道。从我们之前的学习已经知道,想让多个进程间进行通信就需要让他们一起看到同一份资源。匿名管道是通过fork子进程来让子进程继承父进程的fd。命名管道是通过生成命名管道文件,并一起打开管道文件。原创 2024-01-24 22:38:38 · 1369 阅读 · 0 评论 -
Linux-命名管道
上章内容,我们介绍与使用了管道。上章内容所讲的,是通过pipe接口函数让操作系统给我们申请匿名管道进行进程间通信。并且这种进程间通信一般只适用于父子进程之间,那么对于两个没有“血缘”关系的进程,我们还能通过怎样的方式来进行通信呢?本章内容主要讲解命名管道的通信,而命名管道,顾名思义,既然匿名管道是没有名字的管道,那么命名管道就是有名字的管道。原创 2024-01-10 15:09:51 · 537 阅读 · 1 评论 -
Linux-进程间通信_管道
管道,是原生Linux系统提供的一个进程间通信的方式,一般使用于父子进程当中管道的原理就是父子进程打开同一块文件,我们称这个文件叫做"管道"。因为父子进程由于进程的独立性,基本上从数据方面可以说是互不干扰,那么就可以由操作系统帮我们打开一个文件,让父子进程同时看到一块同样的管道文件区域,再通过这个管道文件实现通信。需要注意的是,管道是单向的,且不止可以仅连接两个进程,可以连接多个进程。原创 2024-01-04 19:52:57 · 506 阅读 · 0 评论 -
Linux MyFile
在之前,我们应该都多少接触过了C语言的文件管理,fopen,fclose,fputs....等函数的用法,也分析了系统层面上C语言是如何实现文件管理的。原创 2023-09-15 19:19:33 · 193 阅读 · 0 评论 -
Linux - struct file与缓冲区
对于文件,之前我们已经铺垫的大量的知识,知道了C语言提供的文件接口底层是如何实现,知道了系统提供的文件接口函数如何使用,了解了内核对于打开的文件的体系结构,明白了重定向的原理,而本章内容主要是为之前的知识做一个更详细的解释和补充。本章内容 对之前的内容进行了一个详细的细节补充和缓冲区的概念补充,下篇文章我会针对我们所有所学知识来完成一个自己的FILE和加入到我们自己实现的easy_shell中。原创 2023-06-11 23:32:04 · 556 阅读 · 5 评论 -
Linux - fd文件描述符和文件详解
之前我们学习回顾了C语言文件操作的接口函数,并且学会了使用系统给我们提供的文件操作接口函数,还知道了许多的概念,对于语言层面上的接口函数,它们在底层必然会对系统接口函数进行封装,这不仅便于我们使用,而且还实现了语言的跨平台性。而学习系统调用接口,就是学习语言层面上我们一些我们无法理解的东西,能够更好的了解底层,再今后的学习更加受益匪浅!原创 2023-06-07 21:12:31 · 1256 阅读 · 20 评论 -
Linux - 文件操作和系统接口
对于文件操作,不知大家是否有过接触,例如(fopen,fclose...等),那么大家在刚接触使用这些文件接口的时候,是否有过一些难以言喻的懵懂感,不仅不太理解,而且难以刻于脑海。本章内容不仅会讲解文件操作内容知识,还会讲授一个重要的概念,这个概念会影响你对于Linux系统编程的学习!对于我们日常使用来言,文件似乎就是我们每天运行的游戏,app(.exe)或者我们写的c语言代码(.c和.cpp等),它们都是在磁盘上存储的。而这种观点知识狭义的,实际上,对于文件有着更广的范域。原创 2023-06-05 23:12:23 · 2116 阅读 · 18 评论 -
Linux-模拟一个简单的shell
什么是shell外壳?就是操作系统给我们的一个命令行解释器,在Linux系统中,它的shell叫做bash。那么bash本质是什么呢?本质就是一个文件,一个进程。每个操作系统的shell都是很复杂的,想要实现成本很大,那么,我们是否可以运用我们已学的进程方面知识来模拟一个简单的shell呢?原创 2023-05-23 12:21:15 · 815 阅读 · 11 评论 -
进程控制-进程的替换
虽然进程的替换有很多函数接口,但是,实际上他们的用法都是大同小异,理解它们的命名风格,就懂了。原创 2023-05-22 22:59:43 · 324 阅读 · 9 评论 -
进程控制--进程的等待
之前我们已经学习了和如果你没有这些基础知识,应先去了解进程的相关基础知识。这次我们主要来学习如何让进程等待子进程的退出。为什么要等待子进程?之前我们在学习进程的状态的时候,我们知道了进程有一种状态名叫 僵尸状态(Z状态)。这种状态是因为 子进程已经运行完了,而父进程仍然在运行,子进程不能把它的退出码(返回值)给父进程,从而导致子进程处于僵尸状态,会一直占用系统资源。如果僵尸进程长时间存在,那必然就会导致操作系统资源被占用、泄漏。所以我们有没有什么办法去释放掉该僵尸进程呢?答案是有的!原创 2023-05-21 14:47:17 · 809 阅读 · 8 评论 -
进程控制--进程的退出
进程退出无非三种情况1.进程成功运行完毕,结果正确!2.进程成功运行,结果不正确!3.进程异常终止(程序崩溃!)假如说我们一个进程成功运行完毕了,我们如何来判断我们的进程结果是否正确呢?答案就是我们的main函数的返回值!以前我们写C语言的代码,int main函数里总是return 0,那么为什么是return 0呢?我们不能返回其他的数字呢? 答案当然是可以的,我们想返回多少就返回多少。可是,在规定里,我们可不能随便返回一个值。就像我们调用一个有返回值的函数,这个返回值是我们需要用到的,是不能随原创 2023-05-19 13:44:06 · 366 阅读 · 4 评论 -
Linux- 进程的优先级
这里我们将nice值设置为10,然后再看看进程的优先级变化PRI值变为了90,NI值变为了10.那么我们再讲NI值设置一次为15,PRI值会变成多少呢?这里我们可以看到 PRI值变为了95,NI值变为了15.所以这就说明 PRI(new) = PRI(old)+ NI那我们再来试一试如果nice设置为-100会怎么样?注意:我这里是用的sudo top (用了超级管理员身份)才能修改这么大的nice值。原创 2023-05-07 22:38:48 · 298 阅读 · 2 评论 -
Linux-进程的状态详解
以上我们就详细的介绍了进程的所有的状态,而进程的状态信息都是储存在进程的PCB中,操作系统通过从PCB查看进程的状态来分配进程。原创 2023-05-04 13:56:57 · 1363 阅读 · 5 评论 -
Linux-进程的介绍和标示符
1.知道了进程是由PCB和进程的数据和代码构成的。(重点)2.知道了使用fork函数创建另一个流,实现一份代码,两个进程,一个称为父进程,一个称为子进程,并且子进程和父进程可以拥有不同的运行结果。3.学会了怎么使用 ps 命令来查看进程的相关信息。原创 2023-05-03 23:58:57 · 245 阅读 · 2 评论 -
初学者如何使用Linux上传git
而在未来的工作中,公司通常都是合作形式来完成工作,这时候不仅仅是你一个人的工作,一个文档或者文件可能会被好几个同事进行修改,这个时候,如果我们用微信之类的软件反复传递文件,不仅耗时间,还很有可能找不到最后这个文件的修改版本,更严重的,如果文件出现了问题,很难去溯源这个问题是谁导致的,是谁修改了这个文件。接下来,我们就可以看到你的空文件夹中多了一个文件夹,并且那个文件夹的名字与我们刚刚创建的库的名字一样,我们cd进去可以看到里面有我们在库里看到的所有文件。,有https协议的克隆链接,我们点击复制。原创 2023-04-26 18:30:22 · 590 阅读 · 2 评论