自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 【Linux】多路IO复用技术③——epoll详解&如何使用epoll模型实现简易的一对多服务器(附图解与代码实现)

在正式阅读本篇博客之前,建议大家先按顺序把下面这两篇博客看一下,否则直接来看这篇博客的话估计很难搞懂多路IO复用技术①——select详解&如何使用select模型在本地主机实现简易的一对多服务器多路IO复用技术②——poll详解&如何使用poll模型在本地主机实现简易的一对多服务器在了解以上两篇博客讲解的内容后,我们正式开始本篇博客的相关内容讲解,第三种多路套接字监听技术——epoll模型,并在其优点上进行了进一步的优化,接下来,我们就来了解一下epoll模型的进行多路套接字监听的原理吧。

2023-11-04 23:56:27 844

原创 【Linux】多路IO复用技术②——poll详解&如何使用poll模型实现简易的一对多服务器(附图解与代码实现)

​一个进程默认打开的最大文件描述符个数就是1024,我们可以通过ulimit -a命令在终端下查看,如下图所示所以,当我们在poll函数中的最大监听数那个位置,填入比1024更大的数值的话,系统就会报错,警告Invalid argument——无效的参数想要填入比1024更大的数值,我们就需要去修改默认的文件描述符数量,由于每个系统,甚至每个版本改动文件描述符数量的操作方式不一定一样,所以这里就不多作介绍了,感兴趣的同学可以去查一下对应自己系统、对应自己版本的修改方式

2023-11-04 16:10:32 1208

原创 【数据结构与算法】排序二叉树的创建&节点的添加和删除(附代码实现与代码讲解)

任意一个根节点,比他的左子树中的任意节点都大,比他的右子树中的任意节点都小。OK,在了解了这个基本概念之后,就可以去看下面的代码了。首先来了解下排序二叉树的基本概念。比如下面的这个树就是排序二叉树。

2023-11-01 15:42:44 390

原创 【Linux】多路IO复用技术①——select详解&如何使用select模型实现简易的一对多服务器(附图解与代码实现)

这一篇的篇幅可能有点长,但真心希望大家能够静下心来看完,相信一定会有不小的收获。那么话不多说,我们这就开始啦!!!

2023-10-29 20:41:37 1161

原创 【Linux】网络编程相关结构体与函数

想要实现服务端与客户端一对一的信息传输,我们需要先了解一些基础的结构体与相关函数。

2023-10-20 13:43:56 382

原创 【Linux】线程安全问题①——互斥锁原理讲解&如何用互斥锁实现资源访问互斥(附图解与代码实现)

线程安全主要分为两个方面,分别是本篇博客,我们主要来讲解资源访问互斥这一方面。

2023-10-16 15:53:52 420

原创 【Linux】线程属性的定义&如何修改线程属性(附图解与代码实现)

我们知道,在创建线程时,会用到pthread_create()函数 ,我们来简单介绍一下该函数:pthread_create(线程的tid , 线程属性 , 工作函数名 , 函数需要的参数);这篇博客要讲的线程属性,便是用于进行线程的初始化的,我们可以通过对线程属性的修改来自定义线程,接下来我们来了解一下什么线程属性。

2023-10-15 18:03:25 683

原创 【Linux】线程的几种退出方法(知识点小记)

PS: pthread库不是Linux系统默认的库,而是属于NPTL线程库,NPTL线程库存放在用户层,连接时需要使用静态库libpthread.a,所以在线程函数在编译时,需要连接库函数,如用gcc,使用格式为: gcc 文件名 -l pthread -o 编译文件名。

2023-10-15 15:11:24 589

原创 【Linux】信号屏蔽与信号捕捉的原理与实现(附图解与代码实现)

采用自定义信号队列来帮助信号进行排队。为什么这两大类信号会有这样的差别呢?这就要涉及到这两大类信号的功能了。我们知道,1-31号信号大多是用来杀死或挂起进程的,而进程你杀一次或者挂起一次就行了,你要是支持排队的话,那就会变成来一个信号杀一次,来一个信号又杀一次,杀完之后继续杀,咋的,杀一次不过瘾,还要鞭尸啊?这也就是Unix经典信号不支持排队的原因。而34-64号信号为什么排队呢?

2023-10-07 18:59:33 676

原创 【Linux】信号简介与触发信号的几种方式

定义Linux操作系统中重要的消息机制功能主要被用于进程干预处置,大多数信号的作用是杀死或挂起进程,只有少部分的信号不是用来杀死或挂起进程个数64个,可通过命令 kill -l 来查看系统支持的信号这个时候有些同学可能就会有下面这些疑惑要是信号只是用来杀进程的话,只设计一个信号直接干掉进程不就得了嘛?为什么这么多信号,还大多数信号都是用来干掉或挂起进程的?这里我们来做一个情景假设,相信大家很容易就明白了。

2023-10-06 17:52:03 520

原创 【Linux】进程间通信方式②——文件共享映射(附图解与代码实现)

我们来简单了解下文件共享映射的定义:通过映射文件,使用映射机制,实现资源共享,完成进程通信具体是如何实现的呢?跟随着这篇博客,我们来看一看。

2023-09-24 15:00:04 422

原创 【Linux】进程间通信方式①——匿名管道与命名管道(附图解与代码实现)

这时候一段有趣的对话就出现了:进程1:大哥,我这边管道创建好了,读写的那两个文件描述符我也拿到了,你快来用这个管道啊!进程2:老弟呀,大哥我知道你啥都搞好了,但是我这边没有那两个文件描述符来对管道进行读写啊进程1:那还不简单,大哥你也用pipe函数创建一个管道获取文件描述符呗!进程2:老弟呀,我要用pipe函数了,我这不就创建了一个新的管道了嘛,我还是对你创建的那个管道没有读写权限啊进程1:那咋整啊大哥,老弟我有一大堆话想通过管道跟你说呢进程2:老弟啊,现在就只有一个办法了!

2023-09-15 17:26:19 354

原创 【Linux】浅聊僵尸态进程的产生原因与危害

当子进程退出时,父进程没有读取到子进程的返回代码,子进程就会进入僵尸态。僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取返回代码。

2023-09-10 18:52:48 759 2

原创 【数据结构】反转单向链表的方法之头插法(含原理讲解及代码实现)

将单向链表进行反转的方法很多,这里我们讲解一种比较简单的方法——头插法

2023-08-29 16:22:25 1536 1

原创 点对点协议PPP(Point-to-Point Protocol)

由于可靠传输的实现机制2、3——回退N帧协议GBN和选择重传协议SR实在是难以用一篇博客讲清楚,所以我把视频链接发在下面,感兴趣的同学可以去学习一下:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb?以下图片均来自UP主:湖科大教书匠我们来回到正题,讲解一下点对点协议PPP(目前使用最广泛的点对点数据链路层协议)大家想想,封装成一个帧,需要哪些要素呢?

2022-09-19 20:03:48 2648 1

原创 可靠传输的实现机制1——停止等待协议SW(Stop and Wait)

在开始这篇博客之前,大家来思考一下,什么是可靠传输呢?想要实现可靠传输需要解决哪些问题呢?就好像你给你的同桌传纸条,最基本的问题,你要确保纸条会被同桌收到,两台主机之前的信息交流也是如此,要确保你发送的信息被对方收到。那么在停止等待协议SW中,这一点是如何做到的呢?我们先来初步了解一下SW的工作原理,基本过程如下图所示以下图片均来自UP主——湖科大教书匠视频链接:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb?

2022-09-14 22:40:05 2259

原创 对于计算机网络体系结构的初步思考(附图解)

由于在OSI七层网络模型中,有很多的功能实际上是重复的,所以事实上的国际标准是TCP/IP体系结构,但由于TCP/IP体系结构的网络接口层至今并没有明确的定义,为了便于教学,我们所学的知识都是以右边的原理体系结构为准在看过UP主(湖科大教书匠)的视频后,以下是我对该原理体系结构的一些思考我觉得我讲的还挺生动的(我真臭不要脸)视频链接:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb?......

2022-08-18 00:22:56 839

原创 知识点小记——广播地址与有限广播地址

假设有两个局域网,局域网A内有若干台设备,B局域网内有若干台设备,如下图所示。我们知道IPv4地址分为五类,这里我们只说下A类,B类和C类。IPv4网络地址分为两部分,分别是网络号与主机号。各类IP地址网络号与主机号的划分如下图所示——......

2022-08-10 23:03:23 2688

原创 IP地址与MAC地址的作用、区别和关联

建议大家在看这篇博客之前,看一下我前面写的这篇博客ARP协议及其日常应用本来之前是这两篇博客之前是写在一篇博客里的,但是后面我觉得放在一起有点乱,就分两篇写了。

2022-07-27 21:49:30 1419 1

原创 ARP协议及其日常应用

设备1想要通过ARP协议获取对端的MAC地址,他就会将自己的IP地址,MAC地址,以及对端的IP地址等等信息组装成如下图所示的一个帧(目的MAC为空)上,此时设备1想要与设备3进行通信,但是设备1只知道设备3的IP地址,不知道对方的MAC地址,这个时候ARP协议是如何应用的呢?现在设备1和设备3想要进行交流,设备1还是只知道设备3的IP地址,但是此时他俩不在一个网络中,这个时候ARP协议是如何应用的呢?当交换机收到该帧时,就会在自己的转发表中查看是否存在与该IP对应的MAC地址,这时存在两种情况——...

2022-07-27 01:17:02 1763

原创 静态库与动态库

静态库与动态库

2022-07-24 00:51:58 1815

原创 Linux中execl函数详解与日常应用(附图解与代码实现)

exec函数族

2022-06-02 03:18:09 28036 7

原创 Linux中的僵尸进程与wait函数、waitpid函数详解(附图解与代码实现)

僵尸进程的概念及危害僵尸进程,子进程先于父进程退出,但是系统回收进程资源时,子进程PCB残留,这个进程为僵尸进程危害:1.PCB残留导致内存泄露2.由于PCB创建的数量是固定的,一个僵尸进程会占用一个PCB,从而影响新进程的创建父进程先于子进程退出的话会产生孤儿进程为什么PCB会有残留呢?我们假设张三的孩子张思睿出了车祸,医院没救过来,结果医院直接一把火给尸体烧了,你说这合理吗?这显然不合理,只有父母有权来决定自己的孩子尸体怎么处理,父母可以通过别的方式来知道自己的孩子.

2022-05-26 14:43:05 1325

原创 Linux中fork函数详解(附图解与代码实现)

我们先来看个代码,判断一下这个代码的输出结果会是什么样的,先不要去看运行结果,判断好后再去看看是否和你的预期结果一致。#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>int main(void){ pid_t pid; pid = fork(); printf("xxxxxxxxxx\n"); while (1) { sleep(1)

2022-05-21 01:39:01 8851 12

原创 WLAN适配器故障(WLAN消失)的最快解决办法

这个博客我们不教大家怎么去解决该问题,而是帮助大家快速发现问题的原因,因为博主碰到这个问题时,就跟无头苍蝇一样查了一天都没解决问题,后来找到了问题出现的原因十分钟就解决了,废话不多说,我们进入正题首先在这里输入 “设备管理器” ,点开网络适配器,可能会出现下面的界面,不同的电脑网络适配器的名字可能会不同在这个界面中可能一个或多个地方都会出现感叹号或红叉,我们右键单击出现问题的地方,点击属性,会出现下面的界面在设备状态这一栏可以看到你的计算机出现的问题,如博主当时碰到的问题就是

2022-05-13 11:26:25 3245 2

原创 重载、重定义、重写(覆盖)、隐藏的定义与区别

今天在学习Java中《类和对象》这一章时,我看到了熟悉的重载和重定义,突然想到自己在学习C++时也遇到过这些概念,而且当时还没搞懂,仔细一想,我好像现在也没搞懂。于是我立马扔下手中的Java,离开自习室,在CSDN上查询这两个概念的区别,这不查不知道,一查吓一跳,我又碰到一个非常熟悉的大兄弟----重写,和从未听过的一个老哥们----隐藏。这四个混在一起。完了,更懵了。但是功夫不负有心人啊,还是让孩子搞懂了这几个玩意,我可真是个小天才!那我们来看下这四个概念的内容以及区别吧 ...

2022-05-11 20:10:09 3672 3

原创 Linux基础命令PartTwo(附图解)

记录自己学习Linux的第二天今天学习的还是linux的部分常用命令,老师建议我们在学习这一部分时记一下笔记,我就记在CSDN了,希望给大家带来一些帮助,也方便自己回来查看,非常的nice!目录一. history命令二. rm命令三. mv命令四. cp命令五. head命令一. history命令功能:显示历史记录和执行过的指令命令语法:history [选项] [参数]选项:-N: 显示历史记录中最近的N个记录; -c:清空当前历史命令..

2022-05-05 22:27:28 132

原创 Linux基础命令PartOne+命令行界面讲解(附图解)

记录自己学习Linux的第一天今天学习的是linux的部分常用命令,老师建议我们在学习这一部分时记一下笔记,我就记在CSDN了,希望给大家带来一些帮助,也方便自己回来查看,非常的nice! 目录一 . ls命令1 . 直接输入ls 2. ls -a ...

2022-05-04 23:04:13 1152

原创 递归建树会用到二级指针的原因

相信有朋友在学到树的时候,会纳闷为什么递归建树要用到二级指针,明明在学链表的时候,初始化链表就只用到了一级指针。以下是我个人的一些见解。如有错误,敬请大家留言指正!下面我们来看下递归建树的代码(先序建树)#include<iostream>#include<queue>using namespace std;typedef struct BiTree { //二叉树的英文是binary tree,缩写成了BiTree char data; struct BiT

2021-12-07 16:31:18 319

原创 关于void show(int b),void show(int &b)与void show(int* b)的区别的举例与注解

我们看看下面这三个代码 1 2 3void show(int& b) { void show(int b){ void show(int *b){ c...

2021-11-05 20:33:42 1877

原创 1<<i和if(i&(1<<j))的意思

1<< i就是左移 i 位,得到的是2的 i 次方例如 1<<200000001 ------> 00000100 ------>2的2次方 = 4 i &(1<< j )就是将左移 j 位的1与 i 进行按位与,就是保留 i 转换为二进制数后的第 j 位数,其他的都改为0如果第 j 位数为0,则i&(1<<j)的值为0,否则不为0...

2021-11-04 19:07:35 1948

Linux系统下,使用“epoll+线程池”技术,通过makefile管理的简单项目-“服务器与客户端完成通信并处理小型业务”

内容摘要:使用“epoll+线程池”技术,通过makefile管理的简单项目——“服务器与客户端完成通信并处理小型业务” 技术涉及:网络初始化、epoll模型、线程池、线程同步、互斥锁 适用人群:在校大学生,并对网络通信及线程安全问题有一定基础了解 适用系统:Linux操作系统 使用场景:本地主机、局域网、广域网(要有公网IP) 项目功能:1.服务器与客户端完成链接建立并完成通信 2.服务器采用线程池处理小型业务

2023-11-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除