![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 72
Cling槑
世上无难事,只要肯攀登。
展开
-
Linux--高级IO
高级IO1. 四种典型IO方式2. IO多路转接2.1 select模型2.2 poll2.3 epoll2.4 多路转接模型IO:输入输出-- 过程:等待IO就绪,进行数据拷贝1. 四种典型IO方式典型IO:阻塞IO,非阻塞IO,信号驱动IO, 异步IO阻塞IO:发起IO调用,若IO 未就绪(IO条件不具备),则一直等待非阻塞IO:发起IO调用,若IO未就绪,则立即报错返回信号驱动IO:自定义IO信号处理,等待IO就绪收到信号打断当前操作进行IO异步IO:自定义IO信号处理,发起I原创 2021-09-04 00:25:50 · 214 阅读 · 0 评论 -
Linux--网络层--ip
网络层1. IP协议负责地址管理与路由选择-- IP协议,地址管理,路由选择1. IP协议4位协议版本:4-IPV4协议版本4位头部长度:以4字节为单位8位服务类型:3位优先权弃用,4位TOS,1位固定位0;16位数据报长度:IP报文最大大小64k,upd报文中数据最大大小<64k-2816位分片标识:标识当前分片属于哪个报文 udp报文大小大于MTU,则会在网络层进行数据分片 · MTU是最大传输单元-- 链路层所限制的一个最大数据帧大小 · ud原创 2021-09-03 00:44:54 · 174 阅读 · 0 评论 -
Linux--传输层协议--UDP/TCP
TCP/UDP协议1. UDP协议实现协议特性2. TCP协议实现协议特性三次握手四次挥手传输层:覅则应用程序之间的数据传输–TCP/UDP1. UDP协议实现16位源端-对端端口:用于描述识别通信两端进程16位数据报长度:能够存储最大数字65535-- udp报文总大小最大不能超过64k16位校验和:采用二进制反码求和算法–校验接受方接收到的数据与发送方发送的数据是否一致。协议特性无连接:通信时不需要建立连接,只要知道对方地址就可以直接发送数据不可靠:不保证数据安全、有序到达原创 2021-08-31 23:41:46 · 509 阅读 · 0 评论 -
Linux--https协议
HTTPS协议1. HTTPS协议2. https、ssl加密流程https加密流程1. HTTPS协议并不是一个新的协议,而是在HTTP协议基础上进行了一层加密https协议就是基于ssl进行加密实现加密传输2. https、ssl加密流程目的:实现数据的安全传输安全传输· 身份验证问题:防止伪装· 数据加密问题:防止监听ssl加密:将身份验证与加密传输合在一起身份验证实现· CA认证:通信双方在通信前先到权威机构请求给自己颁发一个CA证书(权威机构信息)· 身份验证通过,但原创 2021-08-31 15:38:06 · 325 阅读 · 0 评论 -
Linux--应用层协议
HTTP协议HTTP协议HTTP协议格式首行-请求行首行-响应行头部空行正文应用层:自定制协议;知名协议-HTTP;· 应用层负责应用程序之间的沟通–程序员自己定义数据的组织格式· 如何将多个数据对象组织称为一个二进制数据串进行传输· 需要考虑要素:传输性能,解析性能、调试便捷性序列化:将数据对象按照指定协议进行组织实现持久化存储或者网络通信传输的二进制数据串的过程;反序列化:按照指定协议,将二进制数据串解析得到各个数据对象的过程;· 序列化方式:结构体二进制序列化、json、pr原创 2021-08-31 10:49:21 · 214 阅读 · 0 评论 -
Linux--网络(socket)套接字编程
socket套接字编程1. udp协议与tcp协议的区别初识1.1 udp协议1.2 tcp协议1.3 客户端、服务端2. udp协议通信程序的编写2.1 **server**2.2 **client**2.3 接口2.3.1 创建套接字2.3.2 为套接字绑定地址信息2.3.3 接收数据2.3.4 发送数据2.3.5 关闭套接字2.3.6 字节序转换接口3. tcp协议通信程序的编写网络通信程序的编写(接口+流程)1. udp协议与tcp协议的区别初识1.1 udp协议用户数据报协议· 特性:原创 2021-08-31 10:14:00 · 222 阅读 · 0 评论 -
Linux--网络发展背景、IP地址、端口、协议、网络字节序
网络1. 发展背景:网络基础1:发展背景、IP地址、端口、通信协议、网络字节序1. 发展背景:局域网(覆盖范围1km以内)、城域网(1km-20km)、广域网(20km以上):根据网络覆盖范围进行的网络划分;互联网(依托于网络)、因特网:相同的东西,不同的叫法-- 国际性的更大的广域网;以太网、令牌环网:组网技术...原创 2021-05-08 21:47:52 · 209 阅读 · 4 评论 -
Linux--进程与线程总结
文章目录1. 进程进程间同步的方式2. 线程3. 进程与线程的共同点4. 进程与线程的不同点5. 多线程与多进程1. 进程进程是拥有资源的独立单位(不管系统中是否有线程);程序是静态的,不涉及进程,进程是程序运行时的实体;pthread_create是一个库函数运行在用户态,创建的是用户级线程,在内核中通过轻量级进程实现调度;可以使用ps -L命令查看轻量级进程信息, pthread_self用于获取用户态线程的tid,getpid用于获取当前进程的id;互斥锁就是标记资源访问状态的一个计数器原创 2021-04-28 16:54:43 · 403 阅读 · 1 评论 -
Linux--线程应用--线程安全的单例模式
线程安全的单例模式线程安全的单例模式单例模式饿汉方式懒汉方式线程安全的单例模式单例模式单例模式:非常典型的一种设计模式应用场景:一个类型只能实例化一个对象,一份资源只能被加载一次实现:饿汉方式/懒汉方式饿汉方式:资源在程序初始化阶段就完成加载(以空间换时间)懒汉方式:资源在使用的时候再加载(延迟加载,节省资源)饿汉方式静态修饰资源,保证资源只有一份,并且在程序初始化阶段完成加载构造函数私有化,一个类只能实例化一个对象不需要考虑线程安全问题//不需要考虑线程安全问题tem原创 2021-04-28 11:14:56 · 163 阅读 · 0 评论 -
Linux-- 线程应用--线程池
线程池对于生产者与消费者模型最为典型的应用;创建一堆工作线程(有最大数量限制)以及一个线程安全的任务队列,这些工作线程不断从任务队列中取出任务进行处理。优点:避免资源无限制使用所造成的资源耗尽的风险;避免频繁大量的线程创建与销毁带来的时间成本;实现:3. 直接在线程入口函数中定义好各种不同类型的处理方法4. 要处理什么数据,这个数据如何处理都由外部传入class ThreadTask{数据, 处理数据的函数}class ThreadPool{有数量上限的线程+任务队列}...原创 2021-04-28 11:14:34 · 159 阅读 · 0 评论 -
Linux--生产者与消费者模型-- 信号量实现
1. 信号量本质:计数器+pcb等待队列;作用:实现进程或线程间的同步与互斥;P操作:计数-1;判断计数<0 ,则阻塞进程或线程(将其加入pcb等待队列)V操作:计数+1;唤醒pcb等待队列上的一个进程或线程;同步的实现:通过计数器对资源进行计数;获取资源前进程P操作,合理则获取,不合理则阻塞。产生一个资源,则进行一次V操作。互斥的实现:计数最大为1,表示只有一个资源,访问前P操作,访问完进行V操作;操作接口:定义信号量:sem_t sem;初始化信号量int sem_ini原创 2021-04-27 17:18:26 · 198 阅读 · 0 评论 -
Linux--线程安全--同步的实现--生产者与消费者模型
生产者与消费者模型一种典型的设计模式设计模式:大佬们针对典型场景设计的解决方案应用场景:应用于有大量的数据产生以及进行处理的场景好处:解耦合,支持忙闲不均,支持并发为了能够支持并发,因此缓冲区必须实现线程安全生产者与生产者之间应该保持互斥关系消费者与消费者之间应该保持互斥关系生产者与消费者之间应该保持同步与互斥关系实现:两种对应角色的线程(一种入队,一种出队)+线程安全的队列实现线程安全的队列;创建线程入队数据,出队数据线程安全队列的实现:封装一个线程安全的队列原创 2021-04-27 17:17:55 · 170 阅读 · 0 评论 -
Linux--线程安全--互斥与同步的实现、死锁
线程安全1. 线程安全线程安全的实现2. 互斥的实现3. 死锁4. 同步的实现1. 线程安全线程中对临界资源的访问操作是安全的临界资源:公共资源,大家都能访问到的资源线程安全的实现同步与互斥:互斥:通过同一时间只有一个线程能够访问资源实现资源访问的安全性同步:通过条件判断让线程对临界资源访问更加合理有序2. 互斥的实现互斥的实现:互斥锁(通过互斥锁保护线程对临界资源的访问操作不会被打断)本质:是一个只有0/1的计数器原理:标记临界资源的两种访问状态,可访问或者不可访问,在线程原创 2021-04-18 20:16:39 · 1123 阅读 · 7 评论 -
Linux--多线程--线程概念与线程控制
多线程线程概念:一个进程中可以有一个或者多个线程,线程是进程中的一条执行流,负责进程中一段代码的运行调度。在Linux下,线程是通过pcb实现的,一个进程中可以有多个pcb,这些pcb共享进程中的大部分资源,相较于传统pcb较为轻量化,因此也被称作轻量级进程。线程与进程的关键性区别:· 进程是系统进行资源分配的基本单元· 线程是系统进行运行调度的基本单元线程间的独有与共享:独有:标识符、栈、寄存器、信号屏蔽字(阻塞信号集合)、errno…共享:虚拟地址空间、IO信息、信号处理方式、工作路径原创 2021-04-18 20:15:28 · 241 阅读 · 0 评论 -
Linux--volatile关键字、函数的重入与不可重入
文章目录1. 关键字volatile2. 函数的可重入与不可重入1. 关键字volatile作用:修饰一个变量,保持变量的内存可见性;修饰变量后,CPU每次访问变量数据都需要重新从内存中加载数据,防止编译器过度优化。2. 函数的可重入与不可重入函数的重入:一个函数在多个执行流程中,重复进入一个函数进行执行。可重入函数:一个函数重入之后不会出现预期之外的结果;不可重入函数:一旦函数重入之后,有可能造成数据二义或者逻辑混乱。判断基准:在一个函数中是否对一个全局数据进行了不受保护的非原子原创 2021-04-18 09:37:05 · 200 阅读 · 0 评论 -
Linux--进程信号--产生、注册、注销、处理、阻塞、应用
进程信号1. Linux下信号种类1.1 信号产生1.2 信号注册1.3 信号注销1.4 信号处理自定义处理方式的信号捕捉流程2. 阻塞信号量不是信号!信号是一种中断机制,或者说是一种事件通知机制,本文讲述的是软件中断通过信号通知进程发生了某个事件,打断进程当前的操作,去处理事件。一个信号对应一个事件,信号必须能够被识别。1. Linux下信号种类使用kill-l 命令进行查看,62种1~31:非可靠信号,借鉴Unix而来,33~64:可靠信号,扩充,信号的生命周期:产生,注册,注销原创 2021-04-11 22:56:14 · 329 阅读 · 0 评论 -
Linux--自定义minishell中实现重定向功能
minishell中实现重定向功能捕捉键盘输入 --ls -a \0> test.txt解析重定向(判断有无>符号)将重定向符号之前的信息按照以前的命令处理方式进行处理 --[ls -a ]\0> test.txt取出重定向的文件名称解析输入(得到命令名称+参数)创建子进程在程序替换之前,进行标准输出重定向到指定的文件,open,dup2在子进程中进行程序替换在父进程中进行进程等待...原创 2021-04-09 23:47:30 · 1746 阅读 · 4 评论 -
Linux--进程间通信--共享内存、消息队列、信号量
进程间通信1. 管道2. 共享内存2.1 原理2.2 特性2.3 操作流程2.3.1 创建或打开共享内存2.3.2 与进程建立映射关系2.3.3 对共享内存进行内存操作2.3.4 与进程间解除映射关系2.3.5 删除共享内存3. 消息队列4. 信号量1. 管道链接2. 共享内存用于进程间的数据共享2.1 原理开辟一块物理内存空间,各个进程将同一块物理内存空间映射到自己的虚拟地址空间中,通过虚拟地址进行访问,进而实现数据共享。2.2 特性效率最高的进程间通信方式· 共享内存是最快原创 2021-04-05 23:31:22 · 363 阅读 · 2 评论 -
Linux--进程间通信--管道
进程间通信1. 进程间通信2. 管道2.1 匿名管道2.2 命名管道3. 共享内存4. 消息队列5. 信号量1. 进程间通信操作系统为进程间能够通信所提供的几种方式,每个进程都有自己的虚拟地址空间,访问的都是虚拟地址,因此进程之间具有独立性,是无法直接通信的。原理:系统为进程间提供公共传输媒介实现公共访问进而实现通信根据通信需求不同提供了不同方式:管道(先进先出),共享内存,消息队列,信息量2. 管道特性:半双工通信(可以选择方向的单工通信),管道提供字节流传输服务:有序的、基于连接的、可原创 2021-04-05 19:37:57 · 265 阅读 · 0 评论 -
Linux--文件系统
文章目录1. 文件系统2. 软链接文件与硬链接文件命令操作1. 文件系统磁盘分区上的文件存储管理inode节点:文件的元信息节点(名称、时间、权限、数据块地址…)Block Group:ext2文件系统会根据分区的大小活粉为数个Block Group,而每个Block Group都有相同的结构组成;超级块(Super Block):存放文件系统本身的结构信息。super block的信息被破坏,可以说整个文件系统结构就被破坏了。记录的信息主要有:· block和inode的总量,· 未使用原创 2021-04-04 22:42:19 · 1577 阅读 · 4 评论 -
Linux--基础I/O--重定向--动态库与静态库
文章目录3. 文件描述符4.重定向原理(>> / > )6. 动态库与静态库的生成与使用3. 文件描述符系统调用IO接口的操作句柄 --非负整数;本质:内核中进程打开的文件描述信息表中的下标;文件描述符与文件流指针· 文件描述符:int ,系统调用IO接口的操作句柄;· 文件流指针:FILE* ,库函数IO接口的操作句柄;· 库函数与系统调用接口的关系:库函数封装了系统调用接口;·· 通过库函数进行IO操作,最终是会归纳到使用系统调用接口完成IO操作。库函数IO与系统调原创 2021-04-03 23:00:09 · 1678 阅读 · 3 评论 -
linux--基础IO--系统调用IO接口
文章目录系统调用IO接口1. open2.write3. read4. lseek5. close6. 五个系统调用I/O接口的用法系统调用IO接口1. open头文件 #include <fcntl.h>int open(const char *pathname, int flags, mode_t mode);pathname --文件路径名;flag --标志位;· 必选项:O_RONLY, O_WONLY, O_RDWR;· 可选项:O_CREAT --如果文件不存在原创 2021-03-28 22:26:48 · 401 阅读 · 0 评论 -
linux--基础IO--标准库IO接口
文章目录1. 标准库IO接口fopenfwritefreadfseekfclose2. 系统调用IO接口openwritereadlseekclose3. 文件描述符4.重定向原理(>> / > )5. 文件系统(了解)6. 动态库与静态库的生成与使用库函数的IO接口和系统调用接口都是用于完成IO的1. 标准库IO接口Linux下一切皆文件;FILE* – 文件流指针;C默认打开三个文件 – 标准输入文件(stdin)、标准输出文件(stdout)、标准错误文件(stderr)原创 2021-03-28 22:26:24 · 313 阅读 · 0 评论 -
Linux--进程等待与替换
进程等待父进程等待子进程退出,获取退出子进程返回值,释放退出子进程资源。· 避免产生僵尸进程。· wait/waitpid 是只要有已经退出的子进程,则会直接处理,不需要等待。· 头文件 #include <sys/wait.h>· pid_t wait(int *status); – 等待任意一个子进程退出,通过status获取退出返回值,释放资源。返回值–成功返回退出子进程的pid,错误返回-1.· pid_t waitpid(pid_t pid, int *status,原创 2021-03-25 23:15:42 · 321 阅读 · 1 评论 -
Linux--进程创建与退出
文章目录1. 进程创建2. 进程退出3. 进程等待4. 程序替换1. 进程创建创建:pid_t fork(void) – 通过复制父进程创建一个子进程,代码共享,数据独有。fork的返回值:父进程返回值大于0,子进程返回0,出错返回-1。写时拷贝:创建子进程后,子进程复制了父进程,因此父子进程一开始映射的是同一块物理内存,但是当内存数据要发生改变的时候,则重新为子进程开辟空间,拷贝数据过去。创建子进程效率高。pid_t vfork(void) – 创建一个子进程并阻塞父进程。父子进程共用虚拟地址原创 2021-03-24 15:11:25 · 324 阅读 · 1 评论 -
Linux--自主实现minishell
自主实现简单的minishell:命令行解释器捕捉用户键盘输入 [ ls -a -l ] char *gets(char *s)解析输入信息–得到命令名称,运行参数[ls] [-a] [-l]创建子进程,给子进程通过命令名称进行程序替换(让子进程运行命令)进程等待,等待子进程退出,防止出现僵尸进程...原创 2021-03-21 20:15:06 · 1418 阅读 · 3 评论 -
Linux--程序地址空间
文章目录1. 程序地址空间1. 程序地址空间地址:指内存的地址,是内存单元的编号。虚拟地址空间:系统给进程所描述的一个假的地址空间,是一个mm_struct结构体。系统会为每一个进程都描述一个假的地址空间,进程访问的都是虚拟地址,访问内存数据的时候,先将虚拟地址转换为物理地址然后访问。使用虚拟地址空间的目的是为了让进程能够访问一块连续完整的地址,并且经过页表映射到物理内存之后,可以实现在物理内存上的离散式存储,提高内存利用率,并且在页表中可以进行内存访问控制。内存管理方式原创 2021-03-21 19:46:51 · 1342 阅读 · 2 评论 -
Linux--环境变量
环境变量是一种变量,是一种保存系统运行环境参数的变量;使程序运行环境配置更加灵活;以及可以通过环境变量实现进程间的小量通信。(子进程的环境变量就是父进程而来的)env:查看环境变量。PATH:程序运行的默认搜素路径–在命令行终端中输入命令名称可以直接执行对应名称的命令程序。set:查看所有变量echo:查看指定变量export:声明/设置环境变量– MYVAL是一个普通变量,而MYVAL2是一个环境变量。unset:删除环境变量char *ge原创 2021-03-20 09:19:05 · 209 阅读 · 2 评论 -
Linux--进程状态
Linux系统编程阶段:使用Linux系统提供的接口完成指定功能程序的编写;文章目录1. 进程概念(1)冯·诺依曼体系结构(2) 操作系统2. 进程控制3. 基础IO4. 进程间通信5. 进程信号6. 多线程1. 进程概念(1)冯·诺依曼体系结构硬件单元:输入设备-键盘,输出设备-显示器,存储器,运算器+控制器(中央处理器cpu)(2) 操作系统Linux组成:内核+应用2. 进程控制3. 基础IO4. 进程间通信5. 进程信号6. 多线程...原创 2021-03-12 23:44:02 · 274 阅读 · 0 评论 -
Linux--常用工具
文章目录1. yum2. vim3. gcc/g++4. gdb5. make/Makefile6. git1. yumyum list 查看yum search 查看yum install 安装yum remove 卸载2. vim操作模式:普通、插入、底行模式切换:任意到普通-Esc;普通到插入:i a o;普通到底行:英文冒号。底行模式 :w :q :wq :q! (不要使用Ctrl+c退出)普通模式 光标移动 hjkl wb Ctrl+f/原创 2021-03-09 15:25:50 · 239 阅读 · 0 评论 -
Linux--基础指令
基础指令命令名称 【操作选项】【操作对象】基础指令1. ls2. pwd3. mkdir4. rmdir5. rm6. cp7. mv8. cd9. touch10. more11. less12. head13. tail14. zip/unzip15. gzip/gunzip16. bzip2/bunzip217. tar18. grep19. find20. man21. ifconfig22. su23. useradd24. passwd username25. 文件访问权限26. unma原创 2021-02-02 01:33:49 · 284 阅读 · 1 评论