Linux
文章平均质量分 69
幽萌之雨
上班族
展开
-
gdb检测死锁
gdb调试死锁原创 2022-09-26 21:45:40 · 401 阅读 · 0 评论 -
Linux下的线程同步方式
信号量信号量主要就是PV操作代码实现:互斥锁互斥锁就是在多线程中,当其中某一线程需要对关键代码访问时,需要先获得一个锁,等访问完代码之后再释放这个锁,防止同一时间其它线程访问这段代码。读写锁条件变量...原创 2022-05-06 20:32:11 · 355 阅读 · 0 评论 -
UDP协议及编程
UDP协议UDP是无连接的,即发送数据之前不需要连接,因此减少了开销和发送数据之间的时延。UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。也就是说UDP的报文长度是由应用进程来决定的,若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率;反之,若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太长,这也会降低IP层的效率,所原创 2022-04-27 13:05:02 · 1142 阅读 · 0 评论 -
TCP可靠传输-运输连接管理
TCP是面向连接的协议。运输连接及=是用来传送TCP报文的,TCP运输连接的建立和释放是每一次面向李安宁街的通信中必不可少的过程。因此,运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常地进行。在TCP连接建立过程中要解决一下三个问题:要使每一方能够确知对方的存在。 要允许双方协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等)。 能够对运输实体资源(缓存大小、连接表中的项目等)进行分配。TC+P连接的建立采取原创 2022-04-26 23:51:58 · 752 阅读 · 0 评论 -
TCP编程
面试官:描述一下TCP的编程流程?答:TCP服务器端编程的一般步骤是: TCP客户端编程的一般步骤是:1.创建一个socket,用函数socket(); 1.创建一个socket,用函数socket();2.设置socket属性 ......原创 2022-04-25 23:40:19 · 3770 阅读 · 3 评论 -
TCP可靠传输-拥塞控制
拥塞控制原理看到拥塞这个词,我们首先会想到什么呢?在生活中,我们几乎每天都能听到早高峰、晚高峰引起的交通堵塞。那么引起堵塞的原因是什么呢?你肯定会说是这个时间段车流量过大,超出道路所能承受的车流量范围了。这是完全正确的,这里道路是一种资源,所有的车都需要这个资源,当需求大于可用资源时,自然就会引起堵塞。那么在网络中我们提到的拥塞也就是这个意思。网络中对拥塞的定义是:在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能下降了。这种情况就叫拥塞。这是很好理解的,条件关原创 2022-04-20 20:46:20 · 5516 阅读 · 0 评论 -
TCP可靠传输-流量控制
在进行数据传输时,我们总希望在最短的时间内完成数据的发送,,但如果发送方发送的太快,接收方来不及接收,就会造成数据丢失。而流量控制就是为了让发送方保持一个合适的发送速率,不要太快,要让接收方来得及接收。流量控制其实就是接收窗口变化的过程,这里直接通过图解来稍加说明:如上图,接收方进行了三次流量控制。此时有一个问题,我们看到,在最后一次流量控制时,接收窗口已经满了,不能再接收数据了,这个时候只有当接受端再重新发出一个新的窗口值为止,但是,如说重新发出的这个窗口信息丢失了,那此时接收方和发送原创 2022-04-19 23:44:12 · 462 阅读 · 0 评论 -
TCP可靠传输-超时重传时间的选择
前面已经讲到,TCP的发送方式在规定的时间内没有收到确认就要重传已发送的报文段。这种重传的概念是很简单的,但重传时间的应该设置多少合适呢?这是TCP最复杂的问题之一如果把超时重传时间设置的过长,就会引起很多报文段不必要的重传,使网络负荷增大。但若把超时重传时间设置的过长,则又使网络的空闲时间增大,降低了传输效率。TCP采用了一种自适应算法,它记录一个报文段发出得到时间,以及收到相应的确认的时间,这两个时间之差就是报文段的往返时间RTT(又称为平滑往返时间)。TCP保留了RTT的一个加权平均往返时间R原创 2022-04-19 21:18:58 · 3596 阅读 · 0 评论 -
TCP可靠传输-滑动窗口
在上一篇叙述停止等待协议时,我们提到了信道利用率这个概念,那么什么是信道利用率呢?信号利用率其实就是在指定时间能能传输的数据分组的多少,我们当然是希望在保证可靠传输的情况下,使用最短的时间传输完数据。但是在使用停止等待协议时,若要传输大量的数据,那简直太浪费时间了,如图:我们假设发送端发送数据所需的时间是Td,数据分组在信道之间往返一次所需的时间为RII,接受发送确认信息所需的时间是Ta。因为仅仅在时间Td内才是用来传送有用的数据,所以信道利用率就可以这样计算:由此可以看出,我们想提高信原创 2022-04-19 15:48:53 · 3755 阅读 · 0 评论 -
TCP报文段
TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能都体现在它首部中个字段的作用。因此,只有弄清TCP首部个字段的作用才能掌握TCP的工作原理。TCP前20个字节使固定的,后边有4n个字节使根据需要而增加的选项。因此TCP的最小长度是20字节源端口和目的端口:各占两个字节,分别写入源端口号和目的端口号。TCP的分用功能也是通过端口实现的。序号:占四个字节(32位)。TCP是面向节流的,在一个TCP连接中传送的字节流中的每一个字原创 2022-04-18 23:21:46 · 4745 阅读 · 2 评论 -
TCP的可靠传输-停止等待协议
TCP是可靠的传输协议,停止等待协议是保证TCP可靠传输的其中一种措施正常传输正常的TCP通信是这样的:分析:在正常传输时,发送端发每发送一段数据,接受端就要确认一下并给出答复(就像你给喜欢的人表白一下,你问对方能做你对象吗,对方答应了,那么你才可以说接下来的话)出现差错如果对方没有应答,那可能就是下面这种情况:当对方还没有答应你时,你在说我带你去吃饭,是不是会被别人当傻子呀,这个时候,你稍等一下,再重新问一次,当对方答应了,你才能说带她去吃饭。分析:在进行数据传输的时候原创 2022-04-17 23:48:45 · 2957 阅读 · 0 评论 -
初识TCP
TCP是什么?答:TCP是TCP/IP体系中非常复杂的一个协议。它具有以下最主要的特点。TCP是面向连接的运输层协议。这就是说,应用程序在使用TCP协议之前,必须先建立TCP连接。在传送数据完毕后,必须释放已经建立的TCP连接。也就是说,引用进程之间的通信就像是在通电话:通话前得先拨号建立连接,通话结束后要挂机释放连接每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的,就像通话,你再同一时间只能给一个人打电话或者接电话,不可同时接听两个电话或者同时打两个电话。TCP提供可靠交付的原创 2022-04-17 22:13:33 · 610 阅读 · 0 评论 -
select/poll/epoll的区别
1.用户态将文件描述符传入内核的方式select:创建3个文件描述符集并拷贝到内核中,分别监听读、写、异常动作。这里受到单个进程可以打开的fd数量限制,默认是1024个。poll:将传入的struct pollfd结构体数组拷贝到内核中进行监听。epoll:执行epoll_create会在内核的告诉cache区建立一棵红黑树以及就绪链表(该链表只存储已经就绪的文件描述符)。接着用户执行epoll_ctl函数添加文件描述符会在红黑树上增加相应的节点。2.内核态检测文件描述符读写状态的方式s原创 2022-03-31 18:01:27 · 1409 阅读 · 0 评论 -
git四(本地服务器到远程服务器的上传与下载)
一般用户使用的都是国内的码云,用来托管代码在使用码云之前需要配置再使用git往码云上上传代码时必须要证明身份才能上传步骤如下:1、获取密钥2、粘贴密钥3、测试一下看是否连接成功4、新建仓库5、写代码6、下载,上传如果还要上传下载,重复第六步即可,一定 一定 一定要注意,下载和上传的命令顺序不能乱...原创 2022-01-28 00:21:30 · 1032 阅读 · 0 评论 -
git三(分支语句的建立、删除以及合并)
步骤:1、在默认分支中创建一个main.c函数,修改提交几次2、再创建一个test函数,并用main函数去调用test3、删除test函数4、创建分支5、修改master分支的main函数此时我们已经删除了test函数,创建了分支dev,但是在dev的main函数中依旧保留着test的调用信息,此时我们再对master的main和dev的main进行修改,就会在合并分支时产生冲突。6.修改dev的分支语句7.合并产生冲突8、解决冲突修改后也要提交附加命令解释..原创 2022-01-28 00:20:58 · 277 阅读 · 0 评论 -
git二(git的安装及基本命令的使用)
干净的工作区有两种情况:一是刚修改完提交的,保持一致;二是从代码仓库中下载下来还没修改,保持一致。如果没有保持一致,即刻就不是干净的工作区了修改提交之后,又变成干净的工作区了版本回退全套流程可以发现,我们可以回退到任何一个版本...原创 2022-01-28 00:20:13 · 82 阅读 · 0 评论 -
git一(初识)
git是用来管理代码的工具原创 2022-01-28 00:19:42 · 344 阅读 · 0 评论 -
shell编程五(awk和sed命令)
awkawk适用于有一定行和列的数据,并且每一行的字符/数据格式必须一致例:a.b.cz.j.hx.f.y字符中间的点是分隔符,每一竖列叫做一个域,分别用$0,$1,$2…$9来表示还是之前那个例子:系统中也有类似的例子,例如etc底下的passwd通过awk,我们可以选择性输出所需要的域例:也可以通过if语句判断精准输出例:注意:在选择性输出时,并不是一次性就直接输出一整个域,而是先把一整行取出来,将不需要的域值取出,保留需要输出的域值,对每一行重复此操作即:awk命原创 2022-01-28 00:19:11 · 627 阅读 · 0 评论 -
shell编程四(函数+脚本之间的调用)
函数在脚本中,主函数和其它函数没有主次之分,都是同一级别的,程序是从函数调用处执行的这两种并没有区别,只是第二种可读性较好如何获得函数的返回值呢?如果在调用mytest之前就打印的话,那就是打印不了的。例:注意:在一个脚本程序中定义一个变量,比如:str=hello,那么在之后的程序中不可能再定义一个str,“str=world”使用的str都是之前定义好的那个str,这里只是重新赋值了而已。脚本调用脚本先看一个简单的调用程序解决办法1:将普通变量设置为环境变量解原创 2022-01-28 00:18:31 · 386 阅读 · 0 评论 -
shell脚本三(条件+控制结构)
条件test或[命令代表测试,测试后边的条件是否满足1.判断是否相等2.判断大于3.判断文件类型4.判断大于、大于等于、小于5.进行自加、自减6.可以在脚本中直接写入命令执行7.将命令执行完的结果赋值给一个变量8.对上边的自加自减进行改进循环1.for循环一般适用于有限循环2.while循环对循环次数进行控制练习:实现一个密码锁,最多可以输入三次密码,如果三次输入不成功,则直接退出。注意:如果第一次或第二次已经成功,则不再进行后边的输入3.unti原创 2022-01-28 00:17:35 · 369 阅读 · 0 评论 -
shell脚本二(变量)
shell变量介绍在学习shell的变量时,我们需要摒弃之前学的c语言之类的变量定义,因为shell和这些是完全不同的。在shell里,使用变量之前通常并不需要定义他们,你只是通过使用他们(比如当你给它们赋初始值时)来创建他们。在默认情况下,所有变量都会被看作字符串并以字符串来存储,即使它们被赋值为数值时也是如此。Linux是一个区分大小写的系统,在写程序时一定要注意。例:这里你只需要知道,str和val是变量名,hello和100是变量值,就可以了,不需要像c和c++那样去考虑变量类型什么的(特别注原创 2022-01-28 00:16:24 · 568 阅读 · 0 评论 -
shell脚本一(脚本介绍)
在了解脚本编程之前,先来了解一下编译型和解释型的概念:编译型语言和解释型语言必须知识点概念:计算机不能直接理解高级语言,只能理解机器语言,也就是二进制指令,我们通常用高级语言写的代码都是先转换成机器语言才执行的。而这种转换的方式有两种:一个是编译,一个是解释。特征:解释型语言是指程序的转换机制是一个解释器,程序通过解释器来即使执行,自己并没有干什么事,只负责指挥。(例如shell脚本语言)。编译型语言采用的转换机制是一个编译器,将高级语言写的程序转换成可执行文件(例如C语言)区别:主要原创 2022-01-28 00:15:30 · 743 阅读 · 0 评论 -
Linux十五(Tcp特点及相关问题)
TCP协议特点TCP协议有什么特点?什么是有序?什么是面向连接?可靠传输通过什么来保证?三次握手发生在什么时候?为什么是三次握手两次不可以是两次?三次握手时会出现什么攻击?四次挥手的过程可以用三次完成吗?四次挥手时,会受到什么样的攻击?“滑动窗口机制”工作原理当网络不好导致数据丢失时当网络恢复时什么是应答确认?什么是超时重传?字节流是什么?为什么要调整分组数据的字节数?该怎样调整?什么是TCP粘包?TCP协议有什么特点?TCP协议是有序的、面向连接的、可靠的字节流传输层协议。什么是有序?数据在分组的原创 2021-09-29 19:00:24 · 148 阅读 · 0 评论 -
Linux十四(Tcp多线程及基于fork的多进程通信)
引入:当一个客户端与服务器建立连接以后,服务器端 accept()返回,进而准备循环接收客户端发过来的数据。如果客户端暂时没发数据,服务端会在 recv()阻塞。此时,其他客户端向服务器发起连接后,由于服务器阻塞了,无法执行 accept()接受连接,也就是其他客户端发送的数据,服务器无法读取。服务器也就无法并发同时处理多个客户端。这个问题可以通过引入多线程和多进程来解决。服务端接受一个客户端的连接后,创建一个线程或者进程,然后在新创建的线程或进程中循环处理数据。主线程(父进程)只负责监听客户端的连接,并原创 2021-09-29 19:06:25 · 977 阅读 · 0 评论 -
Linux十三(TCP通信流程详解(搭配代码,案例))
位置不一样,ip地址不一样网络协议及时一组网络规则的集合,是我们共同遵守的约定或标准。常见的协议TCP:UDP:HTTP:端口号:在一台主机唯一标识一个应用程序(进程)为啥要分层:数据链路层解决的是网络中相邻节点之间的传输端口号在传输层 解决进程间通讯网络层解决不相邻两个节点之间的网络通讯(IP)Tcp 面 向连接的 可靠的 流式服务udp 无连接 不可靠 数据流服务...转载 2021-11-08 11:48:30 · 4375 阅读 · 2 评论 -
Linux十一(线程的创建与同步)
线程的创建与同步1.线程的概念与实现方式1.1 线程的概念1.2 线程的实现方式1.3 进程与线程的区别2.线程使用3.线程同步4.线程安全5.线程与fork1.线程的概念与实现方式1.1 线程的概念线程:进程内部的一条执行路径,调度的基本单位,一个进程可以包含多个线程。进程:一个正在运行的程序。动态,资源分配基本单位。1.2 线程的实现方式线程实现方式:用户 内核 组合用户级:不管用户空间线程数目多少,内核空间只提供一个处理器(线程库管理,创建开销小,不能使用多个处理器)内核级:用户原创 2022-01-27 11:43:34 · 1271 阅读 · 0 评论 -
Linux十(进程间通信)
进程间通信1.管道1.1管道概念1.2 管道通信的特点1.3 有名管道1.4 无名管道2.信号量2.1信号量的描述2.2信号量的使用3.共享内存4.消息队列4.1消息队列原理4.2消息队列示例代码进程间通信(ipc):管道 信号量 共享内存 消息队列 套接字1.管道1.1管道概念管道可以用来在两个进程之间传递数据,如:ps -ef | grep “bash”,其中’|‘就是管道,其作用就是将ps命令的结果写入滚到文件,然后grep再从管道文件中独处该数据进行过滤。1.2 管道通信的特点1.只能以原创 2022-01-27 11:40:53 · 224 阅读 · 0 评论 -
Linux八(信号的使用)
信号的使用1.信号的基本概念2.修改信号的响应方式3.信号发送程序1.信号的基本概念信号:通知进程产生了某种事件与信号有关的系统调用在“signal.h”头文件中有声明2.修改信号的响应方式3.信号发送程序kill()可以向指定的进程发送指定的信号:int kill(pid_t pid,int sig);pid>0 指定将信号发送到哪个进程pid0 信号被发送到和当前进程在同一个进程组的进程pid-1 将信号发送给系统上有权限发送的所有进程pid<-1 将信号发送给进程原创 2022-01-27 11:39:11 · 540 阅读 · 0 评论 -
Linux七(进程复制与替换)
进程复制与替换1.printf函数的输出问题(printf有一个缓冲区)2.复制进程fork3.僵死进程及处理方法4.操作文件的系统调用5.进程替换添加内容:具体bash 命令解释器(一个终端运行一bash)链接的时候会把函数的地址确定下来用Vi写好的程序在I/O设备上(硬盘),运行时在内存中1.printf函数的输出问题(printf有一个缓冲区)printf函数并不会直接讲数据输出到屏幕,而是先放到缓冲区中,只有一下三种情况满足,才会输出到屏幕。1)缓冲区满2)强制刷新缓冲区 fflus原创 2022-01-27 11:34:57 · 903 阅读 · 0 评论 -
Linux六(计算机基础理论)
计算机基础理论1、计算机的基本组成2、进程概论3、内存管理1、计算机的基本组成计算机组成的五大部件1)运算器:也叫算数逻辑单元,完成对数据的各种常规运算,如加减乘除,也包括逻辑运算,移位,比较等。2)控制器:它是整个计算机系统的控制中心,它只会计算机各部分协调的工作,保证计算机按照预定的目标和步骤有条不紊的进行操作和处理3)存储器:存储程序和各种数据4)输入设备:把人所熟悉的信息如,图片,声音,文字,转换为计算机能够识别的信息存储起来5)输出设备:把计算机能识别的信息转换为人能识别的信息,进行原创 2022-01-27 11:27:42 · 1158 阅读 · 1 评论 -
Linux五(Linux系统上的库文件生成与使用)
Linux系统上的库文件生成与使用1、什么是库文件2、静态库的生成3、静态库的使用3、共享库的生成4、共享库的使用5、共享库与静态库的区别1、什么是库文件库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib和/usr/lib。在64位的系统上有些库也可能被存储在/usr/lib64下。库的·头文件一般会被存储在/usr/include下或其子目录下。库有两种,一种是静态库,其命令规则为libxxx.a,一种是共享库,其命令规则为libxxx.so。2、静态库的生成第一步:原创 2022-01-27 11:24:37 · 1216 阅读 · 0 评论 -
Linux四(系统上C程序的编译与调试)
Linux系统上C程序的编译与调试1、gcc分步编译链接2、编译链接过程3、makefile和make4、gdb调试1、gcc分步编译链接(1)预编译gcc -E main.c -o main.i(2)编译gcc -S main.i -o main.s(3)汇编gcc -c main.s -o main.o(4)链接gcc main.o -o main2、编译链接过程预编译阶段1)删除所有的“#define",并且展开所有的宏定义;2)处理所有的条件预编译指令。”#if原创 2022-01-27 11:21:32 · 940 阅读 · 0 评论 -
Linux三(Linux常用命令)
Linux常用命令1. 基础命令2.文件查看命令3.文件编辑命令4.文件压缩与解压命令5.进程管理命令1. 基础命令pwd:显示当前位置的绝对路径cd:路径,切换目录,cd后的参数表示要切换到的位置,可以使用绝对路径或相对路径cd~:返回家目录cd-:最近去过的两个地方进行切换cd . . :返回上一层ls:显示目录中的文件ls -l :查看文件详细信息man:帮助手册,用力爱查看命令、系统调用,库函数等帮助信息touch:创建普通文件,不能通过cd操作用文件权限对应的值可同时改原创 2022-01-27 11:14:25 · 510 阅读 · 0 评论 -
Linux二(系统文件类型与文件权限)
Linux系统文件类型与文件权限1.文件类型2. 文件权限1.文件类型普通文件 ‘-’目录文件 ‘d’管道文件 ‘p’链接文件 ‘l’设备文件(块设备 ‘b’、字符设备 ‘c’)套接字文件 ‘s’上图中列出的文件信息分别为:2. 文件权限r 读权限 值:4w 写权限 值:2x 执行权限 值:1– 无权限 值:0u:表示文件属主的访问权限g:表示文件同组用户的访问权限o:表示其他用户的访问权限3.修改文件权限 chmod3.1文字设定法u表原创 2022-01-27 11:08:39 · 84 阅读 · 0 评论 -
Linux一(Linux系统目录结构介绍)
一. Linux系统目录结构介绍1.目录结构2.常见目录说明boot 系统内核以及与系统启动有关的文件etc 系统的配置文件bin 存放命令的lib 存放库文件的home 普通用户的家目录root 管理员用户的家目录usr 系统运行过程中不长改变的文件var 系统运行情况下常改变的文件,如系统日志proc 虚拟目录,把内存中的一些信息映射到这个目录中,像访问这个文件一样访问这个目录,系统关机之后,此目录底下的文件就会消失dev 设备文件tmp 存放各种临时文件,是所有用户均可访问的原创 2022-01-27 11:06:31 · 236 阅读 · 0 评论