Linux
文章平均质量分 88
TZC⑥
这个作者很懒,什么都没留下…
展开
-
LinuxI/O多路转接
基础知识阻塞与非阻塞阻塞调用是指调用结果返回之前,当前线程会被挂起. 调用线程只有在得到结果之后才会返回非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程同步通信 vs 异步通信同步:调用者发出调用时,没有得到结果不会返回,阻塞等待,调用者主动等待该调用结果异步:与同步相反,发出调用后立即返回,调用内的工作由别人完成,等待被调用者的通知,直接使用,自己并不参与非阻塞IO一个文件描述符, 默认都是阻塞IOint fcntl(int fd, int cmd, … /* arg */原创 2022-04-14 10:50:33 · 1948 阅读 · 32 评论 -
传输层TCP与UDP
传输层负责数据能够从发送端传输接收端,进程到进程再谈端口号在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信端口号范围划分0 - 1023: 知名端口号, HTTP, FTP, SSH等这些广为使用的应用层协议, 他们的端口号都是固定的.1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的我们自己写一个程序使用端口号时, 要避开这些知名端口号pidof原创 2022-03-28 11:49:05 · 10395 阅读 · 32 评论 -
HTTP协议
URI和URLURI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源URL,就是输入的网页地址,是uniform resource locator,统一资源定位符,它是一种具体的URI,URL表示互联网中资源的地点...原创 2022-03-16 10:58:33 · 10446 阅读 · 25 评论 -
网络套接字编程
端口号端口号(port)是传输层协议的内容端口号是一个2字节16位的整数;一个端口号只能被一个进程占用端口号用来标识一台主机内的唯一一个进程,公网IP标识全网内唯一一个进程,ip+port:标识全网内的唯一一个进程一台机器当中一个端口号可以唯一标识一个进程。而一个进程可以占用多个端口进程pid与port的关系在OS中,并不是所有的进程都需要进行网络通信,pid标识系统里的一个进程,port标识进行网络通信的一个进程pid是系统级别的概念,port是网络的概念网络字节序内存中的多字节数原创 2022-03-14 20:13:55 · 4205 阅读 · 23 评论 -
Linux进程间通信
概念进程间通信本质让不同的进程,看到同一份资源内存,文件内核缓冲等)资源由谁(os中的那些模块)提供,就有了不同的进程如何实现进程间通信1.进程之间是具有独立性的,所以难以直接通信2…进程间通信,一般一定要借助第三方(OS)资源3.通信的本质就是”数据的拷贝“进程A->数据"拷贝"给OS的一段内存区域->OS数据"拷贝"给进程B这样通过OS这个“媒介”就实现了进程A与进程B的通信进程通信的目的数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资原创 2022-02-15 14:39:14 · 2551 阅读 · 21 评论 -
线程的互斥与同步
线程的互斥相关概念:临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用原子性:不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成简单的抢票程序 #include<stdio.h> #include<unistd.h> #include<pthread.h> #inclu原创 2022-02-12 14:15:40 · 4669 阅读 · 20 评论 -
线程与线程控制
线程线程定义Linux中的所有执行流,都叫做轻量级进程(LWP),轻量级进程又叫线程线程在进程内部运行:线程在进程地址空间内运行在Linux中,站在CPU的角度,能否识别该task_struct是进程还是线程?不能,CPU不需要识别,CPU只关心一个一个的单个执行流,每个task_struct就是一个执行流在CPU眼中的task_struct<=OS原理的tas原创 2022-02-09 09:38:38 · 1323 阅读 · 18 评论 -
进程的控制
进程创建fork深挖对于返回值:为何要给子进程返回0,给父进程返回子进程的pid?父进程:子进程为1:n的关系,父进程创建子进程通常是要执行任务的,这时候,存在多个子进程执行不同的任务,父进程就需要区分不同的子进程所以就会通过返回子进程pid的方式返回给父进程对于fork分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回,开始调度器调度所以在fork内部,就已经出现了两个执行流,这样才会返回两个返回值fork之后谁先运原创 2021-12-14 20:03:28 · 781 阅读 · 16 评论 -
进程与环境变量
冯诺依曼体系结构可以看出:1.站在硬件角度和数据层面上,CPU只和内存“交流”,外设只和内存"交流"2.数据要处理必须预装载到内存,局部性原理,这个过程由OS完成这就回答了为什么程序运行之前要加载内存?程序本质上是文件,位于硬盘(外设)上,想到CPU运行,必须经过内存操作系统操作系统:软硬件资源的管理者操作系统不会和软硬件打交道,通过驱动拿到资源(数据)操作系统要对拿到的数据管理必须先描述再组织描述:用结构体来对其描述组织:选用适宜的数据结构存储所以操作系统对软硬件的管理原创 2021-12-09 14:42:53 · 1024 阅读 · 13 评论 -
Linux进程信号
信号概述像上课铃声这种信号,我们识别接收后,知道该上课了,这是我们后天学习养成的默认意识。在进程收到信号后,它是知道该怎么做的 ,程序员内置了默认的处理行为进程的运行跟信号的产生属于异步关系:1.进程不一定立刻去处理已经到来的信号2.如果进程在处理优先级更高的事情,可以暂时不处理信号,等到合适的时候再处理。3.会用某种方式记录下已经到来的但没处理的信号,以便在空闲的时候处理这些信号异步:二者之间互不影响同步:二者之间相互影响处理信号的三种方式:1.默认行为2.提供信号处理函数,要求原创 2021-11-13 20:08:02 · 1998 阅读 · 12 评论 -
迭代器失效问题
迭代器指针失效的两种情况:案例一(insert):情况一:意义变了在Linux环境下:示例:在vs2019环境下:可以看到pos是在插入30之前给的值,插入后,可以认为pos就失效了,在vs2019环境下,插入后pos的意义变了,pos指向的是30,不再是3,导致erase(pos)没有达到删除3的目的,程序崩溃而在Linux环境下,“正常运行”,因为不同库的所执行的标准不同,检查机制也不一样,vs检查比Linux严格情况二:野指针只讲程序又插入了一个数据6,程序也崩了,但这原原创 2021-10-09 15:26:23 · 595 阅读 · 5 评论 -
Linux环境基础开发工具使用
Linux 软件包管理器yum软件包和软件包管理器, 就好比手机上的"App" 和 “应用商店”所以yum的作用主要是在Linux下安装软件注意:关于 yum 的所有操作必须保证主机(虚拟机)网络畅通yum的三板斧查看软件包通过yum list 命令可以罗列出当前一共有哪些软件包我们可以使用grep命令筛选出我们需要的包例如:yum list | grep lrzsz软件名"lrzsz"“x86_64” 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择原创 2021-10-08 14:43:00 · 6163 阅读 · 6 评论 -
Linux的权限问题
这里写目录标题Linux下用户权限权限提升问题su命令:Linux权限管理①文件访问者的分类②文件类型③权限属性文件权限值的表示方法文件权限的修改chmod关于目录权限对拥有者和所属组的修改默认权限值修改初始权限值:粘滞位Linux下用户权限Linux下有两种用户:超级用户(root)、普通用户:超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”权限提升问题su命令:格式:su [-][用户名原创 2021-10-04 17:36:50 · 729 阅读 · 6 评论