![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 90
呋喃吖
编程使我快乐
展开
-
【Linux】IO多路复用--poll函数基本处理流程
poll原创 2022-09-17 15:09:42 · 658 阅读 · 1 评论 -
【Linux】400行纯C语言代码带你【手撕线程池】
纯C语言手撕线程池!!!!原创 2022-05-22 21:04:05 · 1151 阅读 · 20 评论 -
【Linux】多线程同步--基于环形队列的生产者消费者模型(信号量解决)
文章目录信号量信号量基本原理伪代码POSIX信号量操作函数基于环形队列的生产者和消费者模型总结信号量什么是信号量?本质信号量就是一个计数器,它表示临界资源的数量,也就是说它描述的是有多少临界资源可以分配给线程去访问;对于临界资源来说,假如我们可以把它在细分多个小的资源区域,如果我们有某总手段处理得当,也是可以让多个线程同时访问临界资源的不同区域,从而实现并发的效果;每个线程在访问临界资源时候,首先必须先申请信号量资源,申请成功才可以进入临界资源;一旦申请成功进入临界资源区域,那么也就表示内部一定原创 2022-05-22 00:40:27 · 482 阅读 · 6 评论 -
【Linux】多线程同步--基于阻塞队列的生产者消费者模型(条件变量解决)
文章目录线程同步条件变量条件变量相关接口生产者消费者模型基本理论基于阻塞队列的生产者消费者模型线程同步什么是线程同步?首先先了解一下:互斥锁带来的一个问题:就是线程饥饿现象:就是多个线程长时间访问不到共享资源,不得已使得线程的执行流得以推进执行,这种现象就是线程饥饿现象!有线程饥饿线程的原因就是互斥锁带来的问题!有一种场景是,当一个线程A获得锁时候,进入临界区,访问结束后,释放锁,该线程A大概率的竞争能力比其他线程更加强,有可能重新获得锁,再次访问临界区!而其他线程可能竞争力不够强,长时间无法获原创 2022-05-20 17:34:17 · 568 阅读 · 2 评论 -
【Linux】多线程--互斥锁
文章目录前言基础概念互斥量mutex多线程模拟抢票(没加锁情况)为何多线程访问临界资源是不安全互斥锁相关接口多线程模拟抢票(有加锁)互斥锁实现的基本原理前言为什么线程需要同步和互斥的操作?因为线程引入共享了进程的地址空间,导致了一个线程操作数据时候,极其容易影响到其他线程的情况;对其他线程造成不可控因素,或引起异常,逻辑结果不正确的情况;这也是线程不安全的原因!如何创建一个线程安全函数?只要尽量不使用全局变量,stl,malloc,new 等操作即可;如果要使用,就要控制同步和互斥问题!基础概念原创 2022-05-12 20:46:30 · 11475 阅读 · 16 评论 -
【Linux】深入理解Linux中的线程
文章目录前言理解Linux中的线程linux 线程与线程接口库的关系线程的共享数据和私有数据线程优点线程的缺点线程异常线程用途线程创建--pthread_create函数创建多个线程方式前言什么是线程?对于大多数教材对线程的定义是这样的: 线程就是 进程内部运行的一个执行流分支,属于进程的一部分,粒度比进程更细更加轻量化;可是这定义还有很多信息我们是不知道的。什么是进程内部运行?什么是一个执行流?什么是粒度更细更轻量化?我们尝试推导一下:线程是进程的一个执行流分支,那么也可以说一原创 2022-05-10 23:26:49 · 885 阅读 · 6 评论 -
【Linux】深入理解进程信号(探讨信号的生命周期)从内核角度看待信号
文章目录前言信号注册函数--signal函数信号的种类进程收到信号的处理方案信号的产生方式进程奔溃的本质进程崩溃的解决方案通过系统调用产生信号通过软件条件产生系统调用如何理解OS给进程发送信号阻塞信号信号在内核的表示认识sigset_t 类型信号集操作函数的sigprocmask--修改屏蔽字位图sigpending--获取pengding位图表信息用户态和内核态的理解信号的捕捉过程总结信号处理的生命周期前言这里即将要分享的信号,和之前分享的信号量是两个完全不相同的东西,就和老婆饼里没有老婆一个道理;原创 2022-05-01 21:48:21 · 339 阅读 · 21 评论 -
【Linux】进程间通信--systemV标准--共享内存
文章目录systemV 标准共享内存通信原理共享内存的理解共享内存的创建--shmget函数查看共享内存和释放共享内存方式挂在共享内存--shmat函数去挂在共享内存共享内存使用的基本框架逻辑代码共享内存完成进程之间通信共享内存通信的特点systemV 标准systemV标准是大佬定制的一套标准,该标准可以在操作系统层面上,完成进程之间的通信;systemV标准给用户提供了系统调用接口,只要我们使用它所提供的系统调用就可以完成进程间的通信;对于systemV标准提供了三种方式:消息队列共享内存原创 2022-04-24 19:00:38 · 2075 阅读 · 3 评论 -
【Linux】进程间通信--管道(匿名管道和命名管道)
文章目录前言进程间通信的目的管道匿名管道管道特点在文件描述符角度理解管道前言进程间的通信,其实就是两个进程需要进行交流,从另一个角度上想:进程本身就是程序员给开辟的,所以进程间通信也就是程序员的通信;我们需要理解的是:进程通信是存在协同的场景的(也就是有顺序的场景);比如:cat test.c | wc -l 这条命令:就是把 cat进程的结果交给wc进程去执行,这就是先后顺序;但是我们知道进程之间是独立的,那么也就是说:不同的进程是看不到对方的资源的;这么来说既然独立,进程是如何通信的呢?原创 2022-04-23 15:49:56 · 3851 阅读 · 4 评论 -
【Linux】动静态库的制作和使用
文章目录gcc的静态链接编译和动态链接编译静态库的制作静态库的使用gcc的静态链接编译和动态链接编译首先我们得知道:gcc 默认编译是动态链接;gcc使用静态链接编译需要加参数static;准备源文件:mytest.c使用gcc 默认编译后,得到 mytest 可执行文件:使用 file 命令查看可执行程序mytest:发现使用的是动态链接:使用 ldd 命令可以查看可执行程序 ,mytest的动态链接库:假如gcc -static静态编译 源文件:mytest.c:那么就是原创 2022-04-18 15:58:13 · 2879 阅读 · 4 评论 -
【Linux】从文件系统的角度理解inode 理解软硬连接
文章目录前言Linux的ext2文件系统inode编号目录存储的内容理解软硬链接前言操作系统为了方便管理硬盘的空间,会将硬盘进行分区管理;比如在window中就是我们所说的C盘D盘等盘符;而 分区被分开后,需要载入文件系统才可以使用,文件系统是操作系统管理硬盘的一种软件的分层方式;Linux的ext2文件系统要了解文件系统,我们可以简单了解以下ext2文件系统的结构;Linux中使用的文件系统大多数都是ext2 ext3 ext4;这几种文件系统的管理方案基本相同,只不过细节上有些不一样;在L原创 2022-04-16 22:22:02 · 974 阅读 · 3 评论 -
【Linux】谈谈用户层缓冲区的问题
文章目录便准C的IO缓冲区标准C的IO接口缓冲区导致的一些现象解释便准C的IO缓冲区在C语言中,它的IO接口都是带缓冲区的;比如什么printf,fprintf,puts,putc,scanf,sscanf等;C语言的标准IO都是有缓冲区的;那它的缓冲区在哪呢?在FILE这个结构体中:有兴趣可以在Linux操作系统中:打开文件/usr/include/stdio.h里面可找到FILE的结构体:在/usr/include/libio.hstruct _IO_FILE {int _flags;原创 2022-04-14 12:13:01 · 875 阅读 · 4 评论 -
【Linux】从系统层面上深入理解文件描述符fd 和 理解一切皆文件 和 重定向原理 和 dup2的基本原理和使用
文章目录前言系统调用I/O接口open函数的参数的理解和和使用前言我们知道我们平时使用的文件操作,如C语言C++或者JAVA等语言,都会封装自己的对文件操作的函数接口,供我们对文件进行操作;而实际上,当我们使用这些文件操作的函数接口时候,本质都是访问硬件设备(磁盘);一个硬件设备是如何被函数接口的调用访问到的呢?当然是通过操作系统,操作系统是管理硬件设备的;所有语言所封装的文件操作接口,都必须通过操作系统的允许,才可以访问到磁盘这个硬件设备,而操作系统是不相信任何用户的,所以为了能够得到操作系统的允原创 2022-04-05 21:53:54 · 2645 阅读 · 9 评论 -
【Linux】进程控制(exec函数族)的理解和使用
进程程序替换是什么我们直到一个进程被创建出来,OS会给它分配进程PCB,mm_struct,页表等信息,同时会将程序的代码和数据加载到物理内存是吧;而进程程序替换就是:正在执行的进程本身的pcb,mm_struct,页表等信息不会发生改变,仅仅把一个新的程序代码和数据替换了原来进程的代码和数据;这就是进程程序的替换;如下图:我们有个进程,在执行中,如果发生进程程序替换,只不过事把该进程的代码和数据从磁盘加载到了物理内存罢了,其他信息不会变化;进程程序替换并不会创建新的进程,它只会加载程序的代码原创 2022-03-27 22:37:30 · 9324 阅读 · 3 评论 -
【Linux】进程控制(wait 和 waitpid)的理解和使用
文章目录1. 进程等待是什么2. 为什么需要父进程等待子进程退出3. 进程等待的方式3.1 wait 函数3.2 waitpid 函数3.2.1获得子进程的status信息3.2.2 理解下waitpid内部是如何返回status的3.2.3 waitpid 的options参数的理解1. 进程等待是什么我们知道一般我们在父进程fork出一个子进程,我们是希望子进程完成某些功能,也就是帮助父进程完成某些任务的;所以我们父进程就需要知道子进程完成的状态如何,是成功还是失败;所以我们就需要父进程通过wai原创 2022-03-20 17:37:16 · 3305 阅读 · 0 评论 -
【Linux】进程控制(进程退出方式)的理解和使用
fork的常规用法一个父进程希望复制自己,使父子进程同时执行不同的代码段。例如,父进程等待客户端请求,生成子进程来处理请求。一个进程要执行一个不同的程序。例如子进程从fork返回后,调用exec函数;创建子进程去执行和父进程一样的代码:也是可以的,但是并没有意义,所以一般我们不会这么做;fork调用失败的原因系统中有太多的进程;进程的创建是比较耗费资源滴,单独对于一个进程来说:不单单是把代码和数据加载内存就可以,还要为它创建PCB,这个PCB就很耗费资源了;实际用户的进程数超过了限制原创 2022-03-20 11:15:21 · 1452 阅读 · 2 评论 -
Linux中对进程地址空间和写时拷贝的理解
C/C++程序的地址空间首先,抛出一个问题:我们平时所说:一个c/c++程序,内存被发划分好多个区域啊,自地址空间,从下往上增长,就有代码区,字符常量区,已初始化全局区,未初始化全局区,堆区,共享区,栈区等区域;请问这是内存吗?答案:肯定不是,那到底是什么呢?我们暂且不说;我们验证一下:这几个区域是否按上面画图的排序:从代码角度查看一下:#include<stdio.h>原创 2022-03-16 20:06:56 · 899 阅读 · 0 评论 -
Linux中环境变量的理解
文章目录案例引入环境变量的基本概念添加新环境变量常见环境变量查看环境变量的命令环境变量的组织方式和代码获取环境变量的方式案例引入首先我们有一个认知:无论是:程序,还是命令,还是工具…在Linux的角度看来它们都是可执行文件;当我们自己编写的程序时候,通常要使用./a.out的方式执行,也就是要带一个./的方式执行,这个 ./的意思就是当前路径下的意思;当我们执行一个程序时候:首先要找到它的位置,然后再执行; 所以说:我们通过 ./的方式就是找到一个可执行文件的路径开始执行;那为什么当我们执行一原创 2022-03-15 12:16:41 · 875 阅读 · 0 评论 -
Linux进程中的优先级的理解(PRI 和 NI)
文章目录优先级的基本理解为什么有优先级的概念查看进程的优先级对PRI和NI的理解用top命令更改已存在进程的nice:达到修改进程优先级总结优先级的基本理解cpu资源分配的先后顺序,就是指进程的优先权(priority)。优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。为什么有优先级的概念这个其实很好理解:在操作系统的角度看,可用资源太少,而进程原创 2022-03-14 12:05:43 · 3276 阅读 · 0 评论 -
Linux中对进程的理解
文章目录再次谈谈进程的概念进程的PCB(task_struck)中到底有什么东西,如何理解这些属性再次谈谈进程的概念我们都知道,进程只不过是一个被加载到内存的一个可执行程序罢了,但是仅仅这么理解是不够的,进程,绝对不是就是一个被加载到内存的可执行程序;再次期间,我们需要理解,程序是谁把它加载到内存的?答案是操作系统;那么程序被操作系统加载到内存时候,是否需要对进程进行管理呢?答案也是肯定的,当然需要管理。那么进程一旦被操作系统管理,那么操作系统又是如何管理进程的呢?答案是:通过描述进程的各种属性,原创 2022-03-13 13:45:50 · 649 阅读 · 0 评论 -
Linux中gcc/g++ gdb make/Make 的基本使用和理解
1. gcc/g++的基本使用gcc和g++是两种编译器,也就是用来编译c/c++源文件的编译器,其中,gcc用来编译c语言,而g++用来编译c++;当然由于c++兼容c,所以说,g++也是可以编译c语言源文件的,但是我们不经常这么做;gcc和g++的使用没有区别,区别的地方就是编译不同的源文件;所以说,我们只要知道如何编译c语言的源文件,那么我们就会编译c++源文件了;也就是说gcc会使用,g++也会使用;gcc的一般选项使用:-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输原创 2022-03-01 16:46:53 · 2313 阅读 · 1 评论 -
linux中解决普通用户无法使用sudo指令的问题
我们在使用sudo命令时候,可能新的普通用户会无法使用该命令来提升权限;比如使用时候,会报错:解决办法:切换root用户身份用vim打开文件/etc/sudoers文件底行模式:set nu;设置行号找到100行左右的位置;在该100行下面添加和100行的一样内容,修改root为你的用户名;底行模式wq!退出即可;...原创 2022-02-22 18:42:59 · 2753 阅读 · 0 评论 -
Linux中yum相关操作和vim的相关操作
文章目录yum的基本使用vim的基本操作vim的配置方法yum的基本使用通过 yum list命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. 例如:yum list | grep lrzsz结果如下:lrzsz.x86_64 0.12.20-36.el7 @base;依次对应下面文字意思软件包名称: 主版本号.次版本号.源程序发行号-原创 2022-02-18 21:25:35 · 754 阅读 · 0 评论 -
Linux权限的理解和管理
文章目录shell命令以及运行原理Linux权限的理解root 用户和普通用户的切换修改文件属性权限修改文件拥有者和所属组shell命令以及运行原理Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:将使用者原创 2022-01-28 15:47:37 · 2797 阅读 · 1 评论 -
Linux基础指令的理解和使用
文章目录Xshell指令方式登录Linux服务器useradd passwd userdel 指令ls 相关指令 和 pwdXshell指令方式登录Linux服务器操作:ssh 用户名@公网IP地址;其中在xshell中粘贴的操作是:shift+insert;复制操作是: ctrl + insert;一般我都是用这个操作粘贴公网IP地址;上面操作回车后:会出现如下图:然后输入你的密码就可以登录成功了;useradd passwd userdel 指令由于Linux是多用户操作系统原创 2022-01-26 17:38:14 · 2641 阅读 · 6 评论 -
linux最最保姆级别的安装(超级详细一步一步的安装),带着学弟学妹从此踏入Linux的大门!!!!!
文章目录前言:一 VMware的下载安装1 VM的下载2 VMware 的安装二 Centos 7.6 的镜像下载三 在 VMware 上安装 centos 7.6前言:安装Linux电脑的环境是 window10 ,64位; 主机Windows linux VMware Centos 的关系这里提供我的linux 系统安装的步骤,一步一步走,保证你安装成功,跟着我走就行 。一 VMware的下载安装VMware 就是一款软件,里面可以安装linux虚拟机系统。1 VM的下载步骤:首原创 2021-07-14 20:23:45 · 1557 阅读 · 21 评论