
Linux
文章平均质量分 78
Fre丸子_
在这里会给大家总结一些小常识
展开
-
【Linux】Linux网络总结图详解
简单来说,Cookie是用来保存个人信息的,它的保存方法有两种,分别为。原创 2023-11-01 11:29:36 · 3670 阅读 · 95 评论 -
【Linux】线程池
简单的来说,线程池的本质就是使用空间换取时间,例如一个程序本来就需要10个字节,但是它申请内存的时候申请了20个字节,为它以后使用,这样在下次使用的时候就不需要再次申请内存了,从而牺牲了空间节省了时间。线程池内逻辑实现,这里我们锁线程共享的变量放到构造器里头直接初始化,其中,我们还是用了队列来存线程数据,如果有线程进入,我们就会将其线程的操作方法放入队列中,当运行后,我们再将其取出。下面我们实现一个简单的线程池,线程池中提供了一个任务队列,以及若干个线程(多线程)。主函数,用于控制多线程。原创 2023-09-28 20:33:32 · 275 阅读 · 0 评论 -
【Linux】POSIX信号量
我们要先进性申请资源,后申请锁,因为如果先申请锁的画,如果这时的信号处于满的状态,那么此时我们的锁就会一直卡的,当其他线程进行申请时,就会一直处于堆积的状态。每个执行流进入临界区时,都会提前申请信号量,申请成功后就有了操作特定临界资源的权限,当操作完毕后,就会释放对应的信号量,同样,如果申请失败也会被挂起。当执行流就行申请信号量失败时,也就是说临界资源已经全部申请空了,此时该执行流就会在对应的信号量的等待队列中当中进行等待,直到有信号量被释放时再被唤醒。原创 2023-09-27 20:49:23 · 242 阅读 · 0 评论 -
【Linux】生产者和消费者模型
生产者和消费者彼此之间不直接通讯,而通过这个容器来通讯,所以生产者生产完数据之后不用等待消费者处理,直接将生产的数据放到这个容器当中,消费者也不用找生产者要数据,而是直接从这个容器里取数据,这个容器就相当于一个缓冲区,平衡了生产者和消费者的处理能力,这个容器实际上就是用来给生产者和消费者解耦的。其中,所有的生产者和消费者都会竞争式的申请锁,因此生产者和生产者、消费者和消费者、生产者和消费者之间都存在互斥关系。生产者和生产者、消费者和消费者、生产者和消费者,它们之间为什么会存在互斥关系?原创 2023-09-27 15:55:09 · 317 阅读 · 0 评论 -
【Linux】线程安全
其实在多线程中,几乎我们访问到的临界区和临界资源较多,所以我们通过多线程就可以很简单的构造这么一个环境。如下代码:此时我们相当如实现了主线程和新线程之间的通信,其中全局变量const称之为临界资源,因为他被多个执行流共享,而主线程中的printf和新线程中的const++称之为临界区,因为这些代码对临界资源进行了访问。当多个线程同时多一个临界资源进行访问修改的时候,那么此时就可能会导致不一致的问题,解决该问题的方案叫做互斥,互斥的作用就是保证任何时候只有一个执行流通过临界区进行对临界资源访问。我们可以自原创 2023-09-27 14:31:13 · 649 阅读 · 0 评论 -
【Linux】详细介绍Linux重入不可重入带例子
在Linux中,重入性指的是一个函数可以安全地在同时被多个线程或进程调用时正确地执行。不可重入性则表示一个函数在被并发调用时可能会导致不确定的行为或数据损坏。原创 2023-09-25 15:07:34 · 220 阅读 · 3 评论 -
【Linux】Linux多线程
LWP表示轻量级进程的ID,代表对线程ID,我们可以看出,每个线程的ID都是不一样的,实际操作系统调用的时候都是调用的LWP,而并非PID,只不过我们之前接触到的都是单线程进程,其PID和LWP是相等的,所以对于单线程进程来说,调度时采用PID和LWP是一样的。我们从图中可以看出,他们的 PID 和 PPID都是一样的,这说明它们属于同一个线程,但是他们的LWP是不相等的,从图中我们可以看到有五个线程,其中,第一个线程为主线程,当主线程异常退出时,剩余的进程也全都会随之退出。原创 2023-09-25 14:38:19 · 219 阅读 · 0 评论 -
【Linux】进程信号
C/C++程序会崩溃,是因为程序当中出现的各种错误最终一定会在硬件层面上有所表现,进而会被操作系统识别到,然后操作系统就会发送相应的信号将当前的进程终止。原创 2023-09-23 08:48:41 · 563 阅读 · 1 评论 -
【Linux】共享内存
ipcs表示多个通信资源,选项包括队列(-q),共享内存(-m),信号量(-a)我们需要查看我们的共享内存时,可以通过。原创 2023-09-21 08:38:41 · 729 阅读 · 0 评论 -
【Linux】管道
管道是一种单向数据流,它有一个读端和一个写端。当父进程创建一个管道后,它会得到两个文件描述符,一个用于读取管道数据,一个用于写入管道数据。接着,父进程会创建一个子进程。子进程继承了父进程的文件描述符。在Linux中,管道被称为半双工(half-duplex),这意味着它只能进行单向数据流的传输。具体而言,管道可以提供两个方向的数据流,一个是从写端到读端的方向,另一个是从读端到写端的方向。但是,不能同时在这两个方向上进行读写操作。原创 2023-09-09 18:55:42 · 1199 阅读 · 20 评论 -
【Linux】动态库和静态库
系统已经预装了c/c++的头文件和库文件,头文件提供方法说明,库提供方法的实现,头和库是有对应关系的,是要组合在一起使用的。头文件是在预处理阶段就引入的,链接本质就是链接库方法一:头文件和.o文件在一块可直接应用形成静态库文件ar -rc lib库名.a *.o方法二:我们将库和头文件都带入到另一个文件进行重新编译运行当我们使用时发现不可以正常使用这是因为我们引入了第三方的库,编译器目前不认可这个库,需要我们手动形成动态库文件shared: 表示生成共享库格式fPIC:产生位置无关码。原创 2023-08-25 16:31:20 · 1472 阅读 · 18 评论 -
【Linux】一张图了解系统文件
在操作中也会遇到,一个分组,数据块没有用完,inode用完了,也会出现inode没有用完,数据块用完了。数据块容器和保存文件属性的位置置为 0即可 ,如果想要恢复,通过一定的方法设置为1即可。inode确定分组,inode数字只能在本分区内使用,不可以跨分区使用。分区、分组、填写属性这一系列操作,都是系统自己完成的。来完成的,所以当我们要进行文件删除的时候,只需要通过。文件的增删改查都是围绕。原创 2023-08-24 17:28:29 · 915 阅读 · 10 评论 -
【Linux】模拟实现FILE以及认识缓冲区
/接受描述符的值int flags;//用来记录打开方式//缓冲区保存//记录缓冲区有多少字符}MY_FILE;mystdio.c//1.识别标志位,打开方式//2.尝试打开文件int fd = 0;else//3.给用户返回MY_FILE对象,需要先进行构建close(fd);//4.初始化MY_FILE对象//5.返回打开的文件return mf;原创 2023-08-23 22:56:31 · 914 阅读 · 30 评论 -
【Linux】文件的描述符和重定向
打开或者创建一个文件的时候,系统会给我们返回一个整数,当返回 -1 时,说明创建文件失败,反之创建成功,当创建成功时,也会给我们返回一个整数值,这个值我们称之为。当标准输入、输出、错误都占用时,文件会顺的数组顺序进行保存,如果前0、1、2出现文件关闭时。Linux进程默认情况下会有3个缺省打开的文件描述符,分别是标准输入>0, 标准输出1, 标准错误2。所以当我们在新建文件后,每个文件对应的描述符都是3,这是因为前三个都被占用了。0,1,2对应的物理设备一般是:键盘,显示器,显示器。原创 2023-08-20 20:52:07 · 635 阅读 · 35 评论 -
【Linux】模拟实现linux的shell
【代码】【Linux】模拟实现linux的shell。原创 2023-08-17 18:08:44 · 238 阅读 · 1 评论 -
【Linux】进程创建、终止、等待、替换
因为子进程也要有自己的代码和数据,但是如果我们创建了子进程后,如果我们的子进程不立马运行并且不对父进程里的内容进行修改时,这两个进程是并用同一块数据空间的,当父进程或者子进程的数据进行修改后,就会发生写时拷贝。这是因为wait 和 waitpid是读取子进程的task_struct结构的,当子进程位为僵尸进程的时候,子进程至少要保留进程的PCB信息,task_struct里面保留了任何进程退出时的退出结果信息。在谈如何终止进程的时候,我们要提取一个新的概念,那就是如何查找上一个进程的退出码为多少?原创 2023-08-17 11:41:33 · 522 阅读 · 2 评论 -
【Linux】进程地址空间
首先基本了解一下地址空间的排布情况目前我们先不考虑解析这里的共享区代码实现验证地址空间的排布7 {8 //代码区10 //初始化数据12 //未初始化数据14 //堆区2324 //栈区29 //字面常量3233 int i,j;34 //命令区i < argc;i++)36 {38 }3940 //环境区env[j];原创 2023-08-12 17:33:34 · 454 阅读 · 4 评论 -
【Linux】进程和环境的认识
是内存文件系统, 存放着当前系统的实时进程信息. 每一个进程在系统中, 都会存在一个唯一的标识符(pid -> process id), 就如同学生在学校里有一个专门的学号一样.在我们fork后,同一个程序会执行两次,这是因为新建的子类和父类的代码时共用的且不可被修改。fork()如果成功了返回值为子进程的id并且0返回给子进程,如果失败了返回-1给父类,没有子进程创建。kill -9是杀死进程的终极武器。他们赋值不同是为了区分不同的执行流,执行不同的代码,一般而言fork之后的代码都是父子共享。原创 2023-07-28 23:19:15 · 217 阅读 · 0 评论 -
Linux之基础git命令的使用
在我们第一次提交的时候,会出现以上这种情况,这时是在要求我们输入我们的邮箱和我们的姓名,这里大家输入自己对应的信息就好。在使用之前,我们先确定我们的xshell是否安装的git,需要输入命令。安装完成后,我们需要进行跟远端的仓库进行连接,连接命令为。如果没有显示版本号,则需要进行安装,安装命令为。,在连接时,需要输入自己的用户名和密码。如果有文件不想提交可以通过修改文件。git命令的初始使用。原创 2023-07-05 11:20:38 · 595 阅读 · 0 评论 -
Linux普通用户sudo配置
修改完成后,我们就可以在普通用户下边sudo文件了,但是每次都要求输入普通用户的密码。修改后拥有者权限变为允许读和写。当我们以一个普通用户的身份sudo一个文件时候,会出现权限不允许的问题,那么我们该怎么设置呢?下面的图中可以看出来,在没有设置权限的时候,拥有者,所属区间,都是只读权限,而其他人没有权限。首先先把用户切换到管理员身份下(root),然后修改。原创 2023-06-11 19:42:40 · 401 阅读 · 2 评论 -
最简单的vim一键配置
vim配置原创 2023-05-22 10:39:06 · 197 阅读 · 0 评论 -
Linux环境基础开发工具安装、使用、gcc/g++编译
vim配置原创 2023-05-22 10:37:27 · 1700 阅读 · 0 评论 -
Linux权限命令
在普通用户下,我们是不可以从一个普通用户跳转到另一个普通用户的,如果要实现资源文件共享在两个用户下,就需要用root用户来创建一个目录,让普通用户进入这个目录来进行共享。linux中所有的用户,都要有密码,无论是root还是其他没即便是多个普通用户,也要设置对应的密码,root的账号密码和普通的用户密码不要设置相同的密码。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask。这里我们看到,刚创建的的目录的权限为775,刚创建的文件权限为664。原创 2023-05-17 14:34:17 · 2802 阅读 · 0 评论 -
Linux全部指令教程
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。linux中所有的用户,都要有密码,无论是root还是其他没即便是多个普通用户,也要设置对应的密码,root的账号密码和普通的用户密码不要设置相同的密码。-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。-r递归处理,将指定目录下的文件与子目录一并处理。原创 2023-05-02 23:30:36 · 915 阅读 · 0 评论