![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 67
头晕神教的神秘人
这个作者很懒,什么都没留下…
展开
-
[Linux] IO多路转接模型
IO多路复用原创 2021-07-19 18:03:22 · 262 阅读 · 1 评论 -
[Linux] 典型IO
文章目录典型IO阻塞IO非阻塞IO信号驱动IO异步IO典型IOIO:即input、output-----输入输出;阻塞IO非阻塞IO信号驱动IO异步IO原创 2021-07-13 17:59:34 · 99 阅读 · 0 评论 -
网络基础:套接字编程,UDP和TCP通信程序
文章目录字节序套接字编程客户端和服务端UDP通信程序字节序字节序:cpu对内存中数据进行存取的顺序主机字节序的分类:小端、大端小端:低地址存低位大端:低地址存高位编写代码判断主机字节序:#include<iostream>using namespace std;void check_sys1(){ int a = 1; char* b = (char*)&a; if (*b == 1) cout << "小端" << endl;原创 2021-05-21 14:13:20 · 435 阅读 · 0 评论 -
网络基础 :网络发展背景、IP地址、端口、TCP/IP四层模型
文章目录协议网络模型OSI七层模型:TCP\IP五层(或四层)模型协议“协议” 其实就是一种约定。计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息.。要想传递各种不同的信息, 就需要约定好双方的数据格式。这种约定就是协议,要实现网络互连就必须要具有统一的协议。网络模型OSI七层模型:以提供的服务不同,将网络通信环境划分为7层:应用层、表示层、会话层、传输层、网络层、链路层、物理层但是由于该划分过于复杂繁琐,所以便产生了后过来优化过的TCP\原创 2021-05-16 11:43:41 · 395 阅读 · 0 评论 -
[Linux]线程安全的单例模式
文章目录线程安全的单例模式饿汉方式懒汉方式线程安全的单例模式应用场景:一个类只能实例化一个对象;一份资源只能被加载一次。向外提供一个统一的接口,用于访问。具体实现:饿汉方式 / 懒汉方式举例简单理解饿汉 / 懒汉方式:饿汉方式:吃完饭后立马洗碗,这样下次到饭点就可以直接吃饭(资源提前加载)懒汉方式:吃完饭后不洗碗,放着,到下次吃饭时再洗碗(资源在使用时才加载)饿汉方式饿汉方式:资源在程序初始化阶段就完成加载—空间换时间注意:饿汉方式的特性决定了它不需要考虑线程安全的问题。1、静态修原创 2021-05-06 16:55:38 · 142 阅读 · 1 评论 -
[Linux]线程池
文章目录线程池:任务类线程池任务队列完整代码:线程池:针对大量的数据请求进行处理的场景创建一堆工作线程(有最大数量限制)和一个线程安全的任务独队列,这些工作线程不断地从任务队列中取出任务进行处理。优点:1、避免资源无限制申请造成资源耗尽2、避免大量的创建和销毁线程带来的时间成本实现:1、直接在线程入口函数中定义好各种不同类型数据的处理方法2、要处理什么数据以及如何处理都由外部传入(函数指针)ThreadTask{数据+处理数据的函数的指针}ThreadPool{有数量上限的线程+线程安原创 2021-05-05 20:43:02 · 92 阅读 · 0 评论 -
[Linux]信号量实现同步与互斥----生产者消费者模型
概述信号量:就是一个内核中的计数器+pcb等待队列,用来实现进程间的同步与互斥原理:对资源进行计数,在进程获取资源之前先通过计数判断获取是否合理;不合理则阻塞等待,直到条件满足后唤醒阻塞进程同步的实现:获取资源前进行P操作,合理则获取,不合理则阻塞;产生一次资源进行一次V操作互斥的实现:计数最大为1,表示只有一个资源,访问前执行P操作,在访问期间其他进程不可访问,访问完成后执行V操作;P操作:计数-1,判断访问是否合理,不合理则阻塞;合理则正确返回V操作:计数+1,唤醒阻塞进程操作接口头原创 2021-05-05 16:17:46 · 438 阅读 · 0 评论 -
[Linux]生产者消费者模型----条件变量
概述生产者消费者模型:一种典型的设计模式,是人们根据典型场景设计的解决方案应用场景:应用于有大量的数据产生和进行处理的场景具体实现:具有多个生产者和消费者线程来生产和处理庞大的数据量,但是生产者和消费者并不直接交互,而是通过中间的缓冲区进行协调工作;生产者产生数据存入缓冲区,消费者从缓冲区中拿到数据后进行处理。优点:解耦合:分离生产和消费,当数据的处理方式发生改变时,仅仅改变消费者即可支持忙闲不均:如果生产的数据量过大,可以先存放在缓冲区中,让消费者慢慢处理支持并发:可以开多个生产者线程或原创 2021-04-27 12:19:17 · 194 阅读 · 0 评论 -
[Linux]多线程
dasdasd原创 2021-04-19 09:57:21 · 293 阅读 · 0 评论 -
[Linux]函数的可重入和不可重入
阅读下面三段代码:思考:为何会出现这样的结果?#include<stdio.h>#include<stdlib.h>#include<unistd.h>int a=0,b=0;int test(){ a++; b++; return a+b;}int main(){ printf("main:%d\n",test()); return 0;}#include<stdio.h>#include<stdlib原创 2021-04-18 16:38:52 · 228 阅读 · 0 评论 -
[Linux] volatile关键字
volatile关键字作用:修饰一个变量,保持其内存可见性,防止编译器过度优化内存可见性修饰一个变量后,cpu每次访问该变量,都需要重新从内存中加载数据例如,现在要对一个整数a进行++操作,cpu会先将a从内存中读取到,然后进行++,再将运算后的结果返回到内存中。代码实例:阅读下面代码:#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<signal.h>int a=原创 2021-04-17 16:08:09 · 243 阅读 · 0 评论 -
[Linux]进程信号
文章目录概述:进程信号的分类信号的生命周期产生:注册:注销处理自定义处理:signal()自定义处理方式的信号捕捉流程信号的阻塞概述:进程信号是一种中断机制,或者说是一种事件通知机制,这里指的是软件中断,通过信号通知进程发生了某个事件,打断进程当前操作,去处理事件。一个信号对应一个事件,并且信号必须能够被识别进程信号的分类kill -l 命令可以查看所有信号:信号一共有62钟:(没有32和33号信号)1~31号:非可靠信号34~64号:可靠信号信号的生命周期信号的生命周期包括:产生,注原创 2021-04-13 21:01:52 · 250 阅读 · 0 评论 -
[Linux]进程间通信,管道,共享内存
文章目录概述进程间通信方式管道管道的读写特性概述进程间通信主要讲的是操作系统为进程间能够进行通信所提供的几种方式。实际上,两个进程之间是无法直接进行通信的,操作系统为每个进程分配了虚拟地址空间,通过页表映射来访问它的物理地址空间,但是这种映射信息,其它的进程无法获取,所以实际上两个进程间是无法直接进行通信的。那么操作系统是如何解决这一问题的?进程间通信原理:操作系统为进程间提供一个公共的传输媒介支持共同访问,从而实现进程间的通信进程间通信方式操作系统根据通信需求的不同提供了不同的进程间通信方式原创 2021-04-06 20:56:28 · 364 阅读 · 1 评论 -
[Linux]动态库与静态库
生成可执行程序的链接方式:动态链接:动态链接:链接动态库,只是在生成的程序中记录库中的函数信息表,并没有将具体代码的实现写入到程序中。因此运行动态链接生成的程序时,需要与依赖动态库的存在。优点:内存中共享一份代码,没有代码冗余静态链接:静态链接:链接静态库,在生成的程序中直接将库中所需函数的实现写入到可执行程序中,生成的程序比较大,但是没有依赖性。库的生成1、将原码经过编译汇编之后,解释成为一个二进制指令.gcc -E:只进行预处理;gcc -S:只进行编译gcc -C:只进原创 2021-03-31 19:50:10 · 260 阅读 · 1 评论 -
[Linux]系统调用IO接口
int open()int open(const char* pathname,int flags,mode_t mode)pathname:文件路径名mode:文件的权限设置,0777;—如果使用了O_CREAT就一定要指定文件权限flags:标志位必选其一:O_RDONLY (只读), O_WRONLY (只写), O_RDWR (读写)可选项:O_CREAT:文件不存在则创建;O_EXCL:如果文件已经存在,报错返回;O_TRUNC:打开文件时清空内容;O_APPEND原创 2021-03-30 15:29:10 · 256 阅读 · 1 评论 -
[Linux]标准库IO接口,文件操作:fopen,fwrite,fread,fclose
文章目录标准库IO接口标准库IO接口FILE * fopen ( const char * filename, const char * mode );功能:打开在参数filename中指定名称的文件,并将其与一个流相关联,该流可以在以后的操作中由返回的文件指针标识。path:带路径的文件名(如果不带路径,则会在当前目录下创建该文件)mode:文件打开方式,如下:控制读写权限的字符串(必须指明)打开方式说明“r”以“只读”方式打开文件。只允许读取,不允原创 2021-03-29 11:38:15 · 357 阅读 · 0 评论 -
[Linux]模拟实现shell:命令行解释器
分步思路解析:1、捕捉用户键盘输入使用例如scanf,gets等函数获取用户输入信息即可2、解析输入的信息–得到命令名称和运行参数解析获取到的上输入信息,将空格,回车,制表符等等全部忽略,只关心输入的字符串等假如输入[ ls -a -l ],我们需要获取到的就是 “ls” " -a" " -l"这三个关键信息3、创建子进程,给子进程通过命令名称进行还程序替换(让子进程来执行命令)使用fork()创建子进程,然后再子进程中使用程序替换函数(execvp原创 2021-03-23 20:20:38 · 458 阅读 · 0 评论 -
[Linux]进程控制:创建、退出、等待、替换
文章目录创建进程pid_t fork(void)pid_t vfork(void)---这种方法用的很少写时拷贝技术退出进程1、main函数中的return2、库函数 void exit(int status)3、系统调用接口 _void exit(int status)查看上一次系统调用使用错误的原因创建进程pid_t fork(void)通过复制父进程创建子进程,父子进程代码共享,资源独有fork()的返回值:(用于区分父子进程)父进程,返回子进程的pid,大于0子进程,返回0出错原创 2021-03-21 15:10:24 · 296 阅读 · 0 评论 -
[Linux]程序地址空间,虚拟地址,内存管理方式
程序地址空间虚拟地址空间地址:通常所说的地址都是内存的地址,即内存单元的编号。在进程中,程序访问的这些地址(变量地址等等)实际上是假地址将其称之为虚拟地址;我们所说的程序地址实际上叫做进程的虚拟地址空间(程序不占用内存,进程占用内存)虚拟地址空间实际上是系统给进程所描述的一个假的地址空间,是一个mm_struct结构体系统会为每个进程都描述一个虚拟地址进程访问的都是虚拟地址,先将虚拟地址转换为物理地址然后再访问页表映射观察上图:现在有个16M大小的内存和三个占用内存大小分别原创 2021-03-16 20:25:29 · 382 阅读 · 0 评论 -
[Linux]环境变量
文章目录环境变量定义命令操作环境变量接口环境变量定义环境变量:保存运行环境参数的变量;使程序运行环境配置更加灵活;以及可以通过环境变量实现进程间的小量数据通信(父子进程的传递)命令操作env:查看环境变量set:查看所有变量(环境变量具有父子进程的传递性,普通变量没有)echo:查看指定变量 (也可用于打印字符串到终端)echo &MYVAL:打印变量MYVAL的值echo “abcdef”:打印字符串abcdefexpor:设置环境变量unset:删除环境变量环原创 2021-03-16 19:02:24 · 237 阅读 · 0 评论 -
【Linux】进程的概念,简单操作,pcb,,进程状态,僵尸进程
文章目录进程概念pcb--进程控制块pcb内包含的描述信息进程的简单操作创建进程ps指令Linux下的进程状态cpu的分时机制进程概念对于操作系统来说,进程就是一个程序运行的描述,用于操作系统进行程序的调度运行管理。实际上对于系统来说,操作系统就是pcb–进程控制块。pcb–进程控制块一个程序运行的同台描述,叫做该程序的pcb进程控制块,在Linux下是一个task_struct结构体。pcb保存进程在内存中的位置,以及进程运行的指令地址,可以看作程序的运行描述。要运行哪个程序,操作系统原创 2021-03-13 13:16:37 · 360 阅读 · 0 评论 -
【Linux】git项目版本管理工具
文章目录git基础操作git项目版本管理工具,用于整理归档项目周期的各个阶段,便于项目的管理(例如,出错后可进行回档等操作)基础操作1、在github建立远程仓库2、将远程仓库克隆到本地: git clone 后跟github仓库网址3、提交本次修改记录:git add all./ 或者 git add path/filename4、提交本地仓库版本管理:git commit -m “双引号内加备注信息”5、将本地版本同步到远程仓库:git push origin maste原创 2021-02-02 14:03:00 · 285 阅读 · 0 评论 -
【Linux】make/Makefile:项目自动化构建工具
make/Makefile:项目自动化构建工具MakefileMakefile是一个文本文件,记录项目的构建规则流程Makefile的编写规则目标对象:依赖对象/t(缩进)具体的执行指令例如:test.exe为目标对象test.c为依赖对象gcc -g test.c -o test.exe为具体操作指令预定义变量$@表示目标对象$^表示所有依赖对象$<表示第一个依赖对象伪对象伪对象:声明一个目标对象和外部文件无关,表示每一次都要重新生成这个对象,无论它原创 2021-02-01 19:13:26 · 370 阅读 · 1 评论 -
【Linux】gdb调试器--
文章目录gdb:调试器调试器的功能:程序错误的分类:调试的前提可执行程序的分类:gdb常用指令流程控制内存控制gdb:调试器调试器的功能:调试、观察程序的运行错误,通常目的是为了排查程序的运行错误程序错误的分类:编译错误、链接错误、运行时错误(运行时逻辑不对以及运行时程序崩溃)调试的前提程序必须是一个debug版本的程序; gcc/g++默认生成releas版本的程序,若要生成debug版本,则使用-g选项,例如:gcc -g test.c -o test.exe可执行程序的分类原创 2021-02-01 15:02:52 · 263 阅读 · 0 评论 -
【Linux】Linux常用命令(适合初学者)
浏览当前目录ls 浏览当前目录,查看当前目录下的内容ls -l 查看目录中文件的详细信息ls -a查看隐藏文件; linux下名称以’.‘符号作为起始的文件都是隐藏文件-la组合选项的使用显示当前路径pwd 显示当前所在目录的路径创建目录mkdir创建目录-p 递归多层级创建目录,哪一层不存在就创建哪一层删除①rmdir 删除空目录-r 删除目录的同时,把祖宗目录也删除掉②rm 删除文件或目录(默认只能删文件,不能删目录)-r 递归的删除掉目录中所有文件之后,然后再删除目录自原创 2021-01-25 17:05:48 · 324 阅读 · 0 评论