![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 94
Linux系统学习
风继续吹TT
这个作者很懒,什么都没留下…
展开
-
【Linux】网络IO(select、poll、epoll)
系统提供select函数来实现多路复用输入/输出模型.select系统调用是用来让我们的程序监视多个文件描述符的状态变化的;程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变select定位:只负责等待,得到fd就绪,就通知上层进行读取或写入,没有读取或写入的功能。read、write、recv、send本身也有等待功能,但只能等待一个fd;但select可以同时等待多个fd。原创 2022-11-15 15:04:32 · 1150 阅读 · 1 评论 -
【Linux】UDP、TCP协议
在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过netstat -n查看);IP+端口号,用来表明互联网中的唯一一台主机上的唯一一个进程。原创 2022-10-31 21:04:23 · 948 阅读 · 0 评论 -
【Linux】Http协议
Http协议原创 2022-10-29 21:32:50 · 1892 阅读 · 1 评论 -
【Linux】套接字编程
创建socket的过程(socket()),本质是打开文件。(仅有系统相关的内容)2.bind(),struct sockaddr_in -> ip,port,本质是ip+port和文件信息进行关联listen(),本质是设置该socket文件的状态,允许别人来连接我accpet(),获取新链接到应用层,是以fd为代表的;所谓的连接,在OS层面,本质其实就是一个描述连接的结构体(文件)read/write,本质就是进行网络通信,对于用户来讲就相当于在进行正常的文件读写。原创 2022-10-19 17:26:49 · 1572 阅读 · 0 评论 -
【Linux】线程池
线程虽然比进程轻量了很多,但是每创建一个线程时,需要向操作系统申请空间创建,如果需要开辟大量的线程,申请和销毁的开销也是很大的。所以如果能够提前申请一块空间,专门用来创建线程,那么就能提高一些效率。线程池:一种线程使用模式,线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过度。...原创 2022-08-15 20:59:58 · 370 阅读 · 3 评论 -
【Linux】线程同步和互斥
目录前言1.线程互斥1.1. 背景概念1.2. 互斥锁1.3. 互斥锁原理2.可重入函数、线程安全和死锁(了解)2.1. 重入和线程安全2.2. 死锁2.2.1. 概念3. 线程同步3.1. 条件变量3.1.1. 概念3.1.2. 条件变量对应操作函数3.1.3.基于阻塞队列的生产者消费者模型3.2. POSIX信号量3.2.1. 概念3.2.2. 信号量对应操作函数3.2.3. 基于环形队列的生产者消费者模型3.3. 总结原创 2022-05-19 15:06:39 · 1132 阅读 · 34 评论 -
【Linux】线程概念
目录1. 线程1.1. 线程概念1.2. Linux下的线程线程的优点线程的缺点1.3. 进程与线程2.线程控制2.1. 线程创建2.2. 线程等待2.3. 线程终止2.4. 线程分离3.线程ID1. 线程1.1. 线程概念一般而言,线程是在进程内部运行的一个执行分支(执行流),属于进程的一部分,粒度要比进程更加细和轻量化。一个进程内是可能存在多个进程的。那么操作系统内就存在更多的线程,所以操作系统管理线程的方式依旧是:先描述,再组原创 2022-05-12 20:54:09 · 1254 阅读 · 42 评论 -
【Linux】进程信号
1. 进程信号概念信号是进程之间事件异步通知的一种方式,属于软中断,本质也是数据 。信号是给进程发的,进程在收到信号后,会在合适的时候执行对应的命令。进程具有识别信号并处理信号的能力。进程收到信号,不一定会立即处理信号,在合适的时候处理,信号保存在进程PCB中。信号是操作系统发送给进程的。查看信号kill -llinux中共有62个信号,前31个为普通信号,34到64为实时信号(不学习)。以前,我们在使用ctrl c 结束进程时,本质是向指定进程发送2号信号。.原创 2022-05-07 09:05:19 · 996 阅读 · 44 评论 -
【Linux】进程间通信
目录1. 进程间通信1.1. 进程间通信的目的1.2. 如何实现进程间通信2. 管道通信2.1. 匿名管道2.1.1 创建匿名管道2.1.2 . 深入理解匿名管道2.2. 命名管道2.2.1. 创建命名管道3. system V 标准进程间通信3.1. 共享内存3.1.1. 实现原理3.1.2. 代码实现3.2. 消息队列(了解)3.2.1 实现原理3.3. 信号量(了解)3.3.1. 实现原理1. 进程间通信1.1.原创 2022-05-02 18:50:10 · 16691 阅读 · 41 评论 -
【Linux】动静态库
目录概念动态库与静态库如何制作动静态库静态库动态库总结概念一般库分为两种:动态库和静态库,他们都是文件。静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文 件的整个机器码。在可执行文件开始运行以前,外部函数的机器码由操作系统从磁原创 2022-05-02 18:33:04 · 717 阅读 · 16 评论 -
【Linux】基础IO
目录1. C语言文件操作1.1. 一般使用1.2. C程序的三个默认输入输出流2. 使用文件系统调用接口2.1. open2.2. write2.3. read3. 文件描述符fd4. 标准输入、标准输出、标准错误5. 重定向原理5.1. 输出重定向5.2. 输入重定向6. dup2接口7. 缓冲区8. Linux文件系统8.1. inode8.2. 软硬链接1. C语言文件操作1.1. 一般使用回顾一下C语言中的读写文原创 2022-04-29 13:49:28 · 1879 阅读 · 11 评论 -
【Linux】进程控制
1.进程创建1.1. fork创建子进程fork创建子进程前面已经见过,现在来详细学习它的使用。#include <unistd.h>pid_t fork(void);返回值:自进程中返回0,父进程返回子进程id,出错返回-1进程调用fork,当控制转移到内核中的fork代码后,内核做 : 分配新的内存块和内核数据结构给子进程 将父进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度原创 2022-04-25 08:52:26 · 708 阅读 · 29 评论 -
【Linux】进程地址空间
1.回顾C/C++程序地址空间这是我们以前理解的内存布局,那么这是真正的内存吗?不是!先来验证一下:#include<stdio.h>#include<unistd.h>#include<stdlib.h>int g_unval;int g_val=10;int main(){ const char*s = "hello wrold"; int a = 10; int*arr = (int*)malloc(4);原创 2022-04-25 08:52:15 · 469 阅读 · 24 评论 -
【Linux】环境变量
1.什么是环境变量环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性 。我们所写的命令,程序,工具....本质都是可执行文件。例如:我们写了这样一个程序,编译好后就成了一个可执行文件。也可以称为命原创 2022-04-22 17:41:39 · 3769 阅读 · 11 评论 -
【Linux】进程
概念什么是进程磁盘上的文件加载到内存上,并为他创建PCB(与进程相关的数据结构)进程控制块(PCB)任何进程在形成之时,操作系统要为该进程创建PCB,用来描述进程的所有属性,管理进程的资源。本质是一个结构体。task_struct在Linux中描述进程的结构体叫做task_struct。task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。task_ struct内容分类标示符(pid): 描述本进程的唯一.原创 2022-04-16 19:07:47 · 2229 阅读 · 9 评论 -
【Linux】Linux开发工具(yum,vim,gcc/g++,gdb,git)
1.yum在Windows环境下安装软件一般在浏览器或者软件管家上面安装。那么在Linux环境下该如何安装软件?1.1软件包在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装. 软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系原创 2022-03-03 15:59:01 · 1939 阅读 · 54 评论 -
【Linux】权限
1.用户linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。超级用户:普通用户:第一次进入linux中,默认用户为超级用户,因为没有创建普通用户。1.1用户管理创建普通用户:用户名:adduser name密码:passwd name删除普通用户:userdel name1.2..原创 2022-02-27 20:50:42 · 1153 阅读 · 4 评论 -
【Linux】基础指令
1.ls语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。 ls –alk 指定文件-l 列出文件的详细信息。-n 用数字的 UID,GID 代替名称。 (介绍 UID, G原创 2022-02-15 16:42:40 · 1019 阅读 · 32 评论