![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 81
Linux
阿阿阿顺Yaya
热爱可抵道路漫长。
展开
-
【Linux】HTTP协议 & HTTPS协议
jsoncpp库的安装使用使用jsoncpp包含头文件Makefile要添加链接jsoncpp库的选项-ljsoncpp。原创 2024-03-24 20:02:50 · 922 阅读 · 0 评论 -
【linux】套接字学习
addrlen参数是一个输入输出型参数,传入的是调用者提供的缓冲区addr的长度,避免缓冲区的溢出问题;是一个通用指针类型,addr参数实际上可以接受多种协议的sockaddr结构体,而他们的长度各不相同,所以需要第三个参数addrlen来指定结构体的长度。常见的套接字有域间套接字,原始套接字,网络套接字等。针对不同的应同场景选用不同的套接字,对应的需要不同的套接字接口,但是Linux将这些接口做了统一。addr是一个输出型参数,传出客户端就的地址和端口号,如果addr参数为空,表示不关心客户端的地址。原创 2024-03-22 16:52:57 · 877 阅读 · 0 评论 -
【Linux】多线程相关问题
不论是系统支持线程还是用户级线程,其切换都需要内核的支持(F)用户态线程的切换在用户态实现,不需要内核支持。线程包含CPU现场,可以独立执行程序(F)线程包含cpu现场,但是线程只是进程中的一个执行流,执行的是程序中的一个片段的代码,多个线程共同完成整体程序的运行。线程和进程都可并发执行,线程的粒度小于进程,占用资源更少,因此通常多线程比多进程并发性更高(T)ps命令用于查看进程信息,其中-L选项用于查看轻量级进程信息(T)pthread_self() 用于获取轻量级进程ID(F)原创 2023-12-14 16:30:38 · 1012 阅读 · 0 评论 -
【Linux】线程概念 | 线程控制 | 线程互斥 | 线程同步
什么叫进程?进程是资源分配的基本单位。用户视角:内核数据结构+该进程对应的代码和数据。内核视角:承担分配系统资源的基本实体。如何理解线程?线程在进程内部执行:线程在进程的地址空间内运行;线程是操作系统调度的基本单位;Linux没有真正意义上的线程结构,Linux使用进程PCB模拟的线程,Linux下的进程统一称为轻量级进程,CPU不关心执行流是进程还是线程,只关心PCB。Linux并不能直接提供线程相关的接口,只能提供轻量级进程的接口。原创 2023-12-11 18:51:12 · 723 阅读 · 0 评论 -
【Linux】 线程池
什么是线程池?一次预先申请一批线程,让这批线程有任务,就处理任务;没任务,就处于等待状态。为什么要有线程池?以空间换时间,预先申请一批线程,当有任务到来,可以直接指派给线程执行。系列函数与vprintf系列函数配合使用可以格式化打印传入的可变参数的内容。原创 2023-12-11 18:50:51 · 223 阅读 · 0 评论 -
【Linux】信号
信号本质是一种通知机制。而进程要处理信号,必须具备“识别”信号的能力(能看到+能处理)。一般而言,信号的产生相对于进程而言是异步的。信号随机产生,进程可能不能立即处理,所以进程要能够临时地记录下信号,以便后续合适的时候进行处理。如何理解信号被进程保存?进程要能知道是什么信号,以及是否产生。进程具有保存信号的相关数据结构(位图),在进程PCB内部保存了信号的位图字段。如何理解信号发送的本质?原创 2023-11-26 16:23:14 · 1256 阅读 · 0 评论 -
【Linux】进程间通信 -- 共享内存
共享内存是SystemV标准进程间通信的一种,该标准还有消息队列和信号量,但下文主要介绍共享内存,然后在谈一下信号量的内容。SystemV标准的进程间通信可以看做单机版的进程间通信。0x2023111840960666创建共享内存使用shmget函数。key:只有创建的时候用到keykey是调用ftok用算法形成的,标识了系统层上的唯一性);大部分情况下用户访问共享内存用的还是shmidshmget的返回值,它的使用类似文件描述符fd,标识了用户层上的唯一性)。size:设置创建的共享内存的大小。原创 2023-11-18 18:14:27 · 214 阅读 · 0 评论 -
【Linux】进程间通信 -- 管道
管道常用来进行具有血缘关系的进程间的通信管道让进程间协同,提供了访问控制管道提供的是面向流式的通信服务管道是基于文件的,文件的生命周期跟随进程,管道的生命周期也跟随进程管道用于单向通信,属于半双工通信的一种特殊情况管道本质是文件,又和传统的文件又不一样。管道文件不会将数据刷新到磁盘,没有与外设之间的IO,是内存级的文件。匿名管道通过父子继承的方式看到同一份资源,命名管道通过文件路径的唯一性看到同一份资源,从而达到不同进程间通信的目的。原创 2023-11-18 17:39:03 · 302 阅读 · 0 评论 -
【Linux】文件系统
文件系统主要来介绍,如何通过对进行分门别类地存储,来支持更好的存取。原创 2023-09-25 22:43:29 · 195 阅读 · 0 评论 -
【Linux】文件
其实,所有的设备,永远都倾向于全缓冲策略(缓冲区满了才刷新),这样做可以更少次地对外设进行访问,提高效率(和外部设备进行IO的时候,预备IO的过程是最费时间的)。Linux内核中,面对每一个被打开的文件都要构建一份struct file结构体(包含了一个被打开的文件的几乎所有的内容,不仅仅包含属性)它是由语言层提供的。的时候,之前的函数一定是执行完了,但数据还没有刷新(在当前进程对应的C标准库中的缓冲区),这部分数据是属于父进程的数据的。一般而言,行缓冲的设备文件有显示器,全缓冲的设备文件有磁盘文件。原创 2023-09-02 18:54:07 · 894 阅读 · 0 评论 -
【Linux】守护进程
那是因为子进程退出,需要被父进程回收。父进程如果比子进程还先退出,此时如果没有其它进程“领养”子进程,就出现子进程无法被回收的问题。子进程变成孤儿进程后,会被 1 号进程“领养”(1 号进程也就是系统本身)。当子进程还没推出,父进程已经先退出,此时子进程就是孤儿进程了。可以通过下面代码进程孤儿进程的验证。那为什么子进程一定要被“领养”呢?运行后查看到如下结果。原创 2024-03-23 13:34:03 · 262 阅读 · 0 评论 -
【Linux】简易shell外壳的制作
【代码】【Linux】简易shell外壳的制作。原创 2023-07-30 21:54:17 · 239 阅读 · 0 评论 -
【Linux】进程控制
通过将磁盘上的一个全新的程序(代码和数据),加载到进程地址空间中,页表的映射也会发生相应的变换,可以使子进程达到执行其它程序的目的。操作系统异常退出或者崩溃,本质都是操作系统杀掉了进程,而操作系统是通过发送信号的方式杀掉进程的。这里有一个问题是,进程具有独立性,进程退出码是子进程的数据,父进程又是如何拿到的呢?创建子进程之后,可以通过进程替换的方式,使子进程不用和父进程执行相同的程序。加载新程序之前,父子的数据和代码的关系是,代码共享,数据写时拷贝的。函数查看所有的退出码,以及对应的退出情况。原创 2023-07-26 22:10:41 · 158 阅读 · 0 评论 -
【Linux】进程地址空间
进程地址空间是一种内核数据结构,他至少要有对各个区域的划分。原创 2023-07-19 16:35:40 · 516 阅读 · 0 评论 -
【Linux】进程优先级
这里要谈的一点是,进程被切换之后,进程如果还没有被执行结束,那这个进程之后在CPU上恢复执行的时候,它是从头开始执行,还是从之前未执行完的地方开始执行?所以CPU只有一个,寄存器中的数据也只能存储一份,但是上下文数据可以有多份,这些数据对应不同的进程,从而能够实现并发的运行。假如进程A正在被执行,CPU内的寄存器一定保存的是进程A的执行的各种临时数据。这是为了等下次回来继续被运行的时候,能根据这些保存的上下文数据,继续按照之前执行的逻辑向后执行,就好像没有被中断过一样。而系统的命令是默认可以被找到的。原创 2023-07-14 20:04:48 · 554 阅读 · 0 评论 -
【Linux】进程状态
新建状态:进程刚刚被创建出来。运行状态:并不是说正在被CPU运行的时候才是运行态。而是当 task_struct 结构体在运行队列中排队的时候,就已经是运行态了。阻塞状态:等待非CPU资源就绪的状态。挂起状态:当内存空间不足时,操作系统会适当地置换进程的代码和数据到磁盘空间。退出状态:进程退出之后的状态。原创 2023-07-12 17:38:35 · 278 阅读 · 0 评论 -
【Linux】进程
结构中有五大组件。存储器就是内存。(因为存储器的加入,该体系结构既维持了的效率,有降低了构造成本)输入设备具象的有键盘,摄像头,话筒,磁盘等。输出设备具象的有显示器,音响,磁盘等。运算器主要用于做算术运算和逻辑运算。控制器主要用于协调CPU和外部事件。比如加载磁盘数据到内存。冯·诺依曼体系结构中,CPU处理数据,需要先将外设中的数据加载到内存。站在数据的角度来说,就是CPU不和外设直接交互,外设直接和内存交互。这里也就可以知道,为什么程序要运行,必须先被加载到内存。原创 2023-07-10 12:33:41 · 253 阅读 · 0 评论 -
【Linux】gdb 的使用
当我们写完一个程序,使用 gcc 编译链接,默认形成的可执行文件是 release 版本的。因为不包含调试信息,是不能够被 gdb 直接调试的。要想使用 gdb 进行调试,必须形成的是 debug 版本的可执行程序。gcc -g就可以形成 debug 版本的可执行程序了。从这里可以看到 Test_debug 文件因为包含调试信息是要比 Test 文件大的。这里可以使用readelf -S。原创 2023-07-06 20:38:05 · 148 阅读 · 0 评论 -
【Linux】yum & git 的使用
yum 源就是一个配置文件。可以看到 yum 源的文件中包含有很多下载源的链接。我们使用 yum 命令进行安装的时候,就是通过这些链接去寻找下载源进行下载的。这些链接一般都是国内的镜像网址。所谓的更新 yum 源,也就是将最新的 yum 源(配置文件)安装后,进行名字的替换就行了。原创 2023-07-05 20:26:55 · 165 阅读 · 0 评论 -
【LInux】简单进度条程序的编写
没有被及时打印出来的信息被送入缓冲区,而显示器设备的刷新策略一般都采用的是行刷新(碰到换行符刷新),所以信息就被“逗留”在了缓冲区。然后程序停顿 3 秒,退出程序的时候缓冲区的信息又被刷新到屏幕上。真实看到的运行结果是,程序先停顿了 3 秒,然后打印输出完之后,程序直接退出。主要问题是,右边的代码,也实先打印,然后停顿 3 秒,程序退出吗?左边的代码很简单,就是先打印,然后停顿 3 秒,程序退出。在进行进度条的程序的编写之前,还有几个问题需要解决。第二个问题,什么是换行?至于为什么,当然是缓冲区的问题了。原创 2023-07-03 23:08:13 · 116 阅读 · 0 评论 -
【Linux】gcc 的使用 | 动静态库 | 软硬链接 | make & Makefile
程序翻译的过程,动静态库的链接,make & Makefile的使用原创 2023-07-04 19:54:46 · 400 阅读 · 0 评论 -
【Linux】Vim编辑器的使用
vim是一款多模式的编辑器。原创 2023-06-27 22:40:32 · 223 阅读 · 0 评论 -
【Linux】权限理解
而这里要说明的是,我们所说的不以文件后缀来区分文件类型,是在Linux系统环境的层面来说的。如上面例子中,root虽然属于other角色,但是依旧可以对文件读写,可以认为是开挂的存在 ,这也说明了root用户和普通用户是有区别的。三种操作权限,而每一种操作权限只分为有和没有两种状态,所以每一种角色对一个文件的权限操作的状态就有8(举个形象的例子,就像过年时收到的红包是你的,但是被父母收起来了,你就没有了对红包的使用权限。由Linux下一切皆文件的思想,我们谈论的也将会是文件的权限。原创 2023-06-27 14:53:31 · 191 阅读 · 0 评论 -
【Linux】常用指令快速掌握
ls pwd cd touch mkdir tree rm man nano cp mv cat tac echo more less head tail date cal find which whereis alias grep xargs zip unzip tar bc uname history原创 2023-06-20 15:38:16 · 878 阅读 · 0 评论 -
【Linux】发展史浅谈
LInux和微软的Windows在定位上都是一样的,即操作系统。而且LInux是一款雄霸的操作系统,是在企业端被高频使用的后台操作系统。原创 2023-06-13 22:15:04 · 540 阅读 · 0 评论