自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP协议

CRC校验接收端校验不通过则认为数据有问题此处的检验和不光包含TCP首部也 包含TCP数据部分TCP将每个字节的数据都每一个ACK都带有对应的确认序列号意思是告诉发送者我已经收到了哪些数据;下一次你从哪里开始发。

2024-06-13 19:06:36 1222

原创 UDP协议

如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。BOOTP: 启动协议(用于无盘设备启动)DHCP: 动态主机配置协议。NFS: 网络文件系统。DNS: 域名解析协议。

2024-06-13 16:08:18 307

原创 HTTP协议

平时我们俗称的网址其实就是说的URL首行: [方法版本Header:请求的属性冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束Body:空行后面的内容都是Body. Body允许为空字符串如果Body存在则在Header中会有一个 Content-Length属性来标识Body的长度HTTP响应首行: [版本号] + [状态码] + [状态码解释Header:请求的属性冒号分割的键值对;

2024-06-13 15:57:51 997

原创 网络编程套接字

这个时候服务器会向客户端发送 一个FIN;端口号能够标识网络上的某一台主机的某一个进程。当前的这个数据要交给哪一个进程来处理。但是一个端口号不能被多个进程绑定。一个端口号只能被一个进程占用。服务器就知道客户端关闭了连接。一个进程可以绑定多个端口号。如果客户端没有更多的请求了。端口号用来标识一个进程。段并阻塞等待服务器应答。向服务器发起连接请求。客户端会向服务器发送。

2024-06-11 23:00:48 537

原创 Linux进程间通信

一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到 内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。通常,一个管道由一个进程创建,然后该进程调用fork。(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一但这些工作完 成之后,它们具有相同的语义。管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。一般而言,进程退出,管道释放,所以管道的生命周期随进程。调用阻塞,即进程暂停执行,一直等到有数据来到为止。所以,看待管道,就如同看待文件一样!

2024-06-11 21:18:14 900

原创 Linux基础I/O

openman open。

2024-06-09 22:53:44 909

原创 C++11

lambdalambda表达式各部分说明,该列表总是出现在lambda函数的开始位置,mutable:默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略即使参数为空:参数列表。与,如果不需要参数传递,则可以连同()一起省略,以及[var]:表示值传递方式捕捉变量var[=]:表示值传递方式捕获所有父作用域中的变量包括this)[&var]:表示引用传递捕捉变量var[this]

2024-06-09 19:28:06 609

原创 C++11

左值引用只能引用左值,不能引用右值但是const左值引用既可引用左值,也可引用右值。

2024-06-09 10:59:08 624

原创 Linux进程控制概念

在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork返回,开始调度器调度当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程,看如下程序这里看到了三行输出,一行before,两行。

2024-06-08 23:24:44 1517

原创 Linux进程基本概念

父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

2024-06-08 16:00:46 249

原创 C++的类型转换

注意: 强制类型转换关闭或挂起了正常的类型检查,每次使用强制类型转换前,程序员应该仔细考虑是 否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用 域,以减少发生错误的机会。static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用 static_cast,但它不能用于两个不相关的类型进行转换。dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换)1. dynamic_cast只能用于父类含有虚函数的类。

2024-06-07 22:58:33 280

原创 C++中的模板---下

【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2024-06-05 12:02:27 331

原创 C++中的智能指针

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内 存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对 该段内存的控制,因而造成了内存的浪费。

2024-06-03 23:01:56 668

原创 C++中的多态

必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口 类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生 类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。

2024-06-02 19:44:38 386

原创 C++中的继承

机制是面向对象程序设计。

2024-06-02 18:29:12 831

原创 C++模板---上

class 类模板名// 类内成员定义类模板中函数放在类外进行定义时,需要加模板参数列表Vector();~Vector();

2024-06-02 10:25:59 406

原创 C/C++内存管理

注意:申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用 new[]和delete[],注意:匹配起来使用。

2024-06-01 23:47:24 267

原创 C++中的类

class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略。

2024-06-01 19:08:44 1000

原创 Linux线程互斥相关函数及其概念

如果成功,pthread_mutex_destroy()和pthread_mutex_init()函数将返回零;返回值:如果成功,pthread_mutex_lock()和pthread_mutex_unlock()函数将返回零;返回值:如果成功,pthread_mutex_lock()和pthread_mutex_unlock()函数将返回零;如果成功,pthread_mutex_destroy()和pthread_mutex_init()函数将返回零;pthread_mutex_unlock函数。

2024-05-05 15:57:45 237 2

原创 线程相关概念

与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多(cpu在处理一个进程时会把这个进程的一些数据提前的加载到cpu中,这样就可以减少cpu和内存之间的IO次数,从而提升运行效率,所以线程之间的切换是在cpu的内部进行的,而一旦进行进程之间的切换,就要从新把数据加载到cpu。线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该 进程内的所有线程也就随即退出。不该共享的变量而造成不良影响的可能性是很大的,换句话说线程之间是缺乏保护的。

2024-05-05 10:54:38 330 2

原创 线程中常用的函数

功能:分离一个线程(当一个线程被分离,这是主线程就不会再关注这个被分离的从线程,在从线程执行完毕时,将自动释放自身资源,这时如果在使用pthread_join函数对该线程进行等待将会出现错误)value_ptr:输出型参数,接受从线程的返回值,如果设置为空则代表忽略从进程的返回值。取消一个线程的执行(可以是其他线程使用该函数取消该线程,也可以是自己取消自己)无返回值,跟进程一样,线程结束的时候无法返回到它的调用者(自身)attr:设置线程的属性,如果为空,则代表设置为默认属性;

2024-05-04 22:22:30 407

原创 信号捕捉的相关概念

sa_mask是信号堵塞表(当正在处理一个信号时,系统又向该进程发送了一个信号,如果该信号在这个表中,进程会处理完当前信号,然后再处理新发送过来的信号)插入操作的 两步都做完之后从 sighandler返回内核态。库的很多实现都以不可重入的方式使用全局数据结构。, 如果一个函数只访问自己的局部变量或参数,下面是sigaction在代码中的具体使用。为什么两个不同的 控制流程调用同一个函数,如果一个函数符合以下条件之一则是不可重入的。sa_handler是处理信号的方法。像这样的函数称为 可重入函数。

2024-05-03 19:51:23 14 1

原创 操作系统的用户态和内核态

一、用户态和内核态概述用户态:内核态:二,为什么要有用户态和内核态三,cpu的指令集针对上面的行为,硬件的生产厂商对指令集的访问设置了相关的权限,不同权限访问的指令集不同,例如Inter把 操作的权限由高到低划为4级:ring 0是最高权限,ring 3是最低权限,而我们的的Linux操作系统选用的是ring 0和ring 3其中 ring 0 权限最高,可以使用所有 ,ring 3 权限最低,仅能使用常规 ,不能使用操作硬件资源的 ,比如 读写、网卡访问、申请内存都不行,Linux系统仅采用ring

2024-05-03 16:44:58 864 2

原创 阻塞信号的相关概念

handler: 信号的处理方法SIL_DFL代表默认处理方法,SIG_IGN代表忽略该信号,User Space代表用户自定义的方法。pending:表示该进程有无接受到这个信号,1表示接受到这个信号,0表示为接受到这个信号。返回值:有相关信号返回1,没有相关信号返回0,查找失败返回-1,并设置相关的错误码。block:信号有无被堵塞,1表示被堵塞,0表示未被堵塞。,表示 该信号集的有效信号包括系统支持的所有信号。返回值:成功返回0,失败返回-1,并设置相关错误码。作用:查找set中是否有相关的信号。

2024-05-02 22:05:47 6 1

原创 进程信号的相关概念

原因:相关硬件是被在遇到这种错误是,寄存器会把这种错误记录下来(位图的相关位置一),再有我们的操作系统识别并解析,然后给相关进程发送解析后的信号。如管道的读端关闭,写端还在正常运行,这是操作系统就会向写端发送一个终止信号(这里是不满足某些软件条件而出发的信号)返回值:Alarm()返回任何先前计划的警报将要交付的剩余秒数,如果没有先前计划的警报,则返回零。(3)用户自定义(及收到信号后的后续处理由代码的编写者进行处理)用下面的函数,接收信号,并进行自定义处理。pid: 进程的pid(发送信号的目标进程)

2024-05-02 15:05:13 581 2

原创 system V共享内存

shmflg: 他的俩个可能的取值IPC_WRONLY和IPC_REONLY前者为只写模式,后者为只读模式。shmid:用户级的共享内存编号(shmget中的key为操作系统级别的共享内存编号)功能:创建一个独一无二的key_t类型的数值(返回值一般做shmget的第一个参数)返回值:成功:返回key_t值(即IPC 键值)出错:-1,错误原因存于error中。shmid:用户级别的共享内存编号。返回值:成功返回一个非负整数,即该共享内存段的标识码;返回值:成功则返回所连接的虚拟地址,失败则返回-1。

2024-05-01 20:59:15 6 1

原创 命名管道和匿名管道

2.匿名管道是用pipe()创建,并且在创建时读写都已经打开,命名管道是用mkfifo创建,创建之后不会默认打开,需要用户手动开启。3.匿名管道只能实现具有血缘关系进程之间的通信,而命名管道能实现俩个毫无关系进程之间的通信。1.命名管道和匿名管道在本质上没有区别,都是内存级的文件不会和磁盘发生交互。下面是命名管道的一些相关代码。

2024-04-29 18:18:13 67

原创 管道的读写规则

可知管道最大可以存储65536个字节,当管道存储达到上限值之后,而读端,不读取,就会发生堵塞。3 如果所有管道写端对应的文件描述符被关闭,则。4 如果所有管道读端对应的文件描述符被关闭,则。调用阻塞,即进程暂停执行,一直等到有数据来到为止。当读端打开,而写端不写入任何数据,这是就会出现堵塞。依然是堵塞状态,不会出现任何的错误,读端会返回0;如果所有管道读端对应的文件描述符被关闭,则。当写端一直在写入,而读端不读取数据。当我们的写端写入,读端突然退出。当读端正常运行,写端突然关闭。

2024-04-29 13:06:26 226

原创 动态库和静态库

再执行ldconfig(sudo运行)然后向新建的文件中写入库的路径。

2024-04-27 14:32:38 197

原创 理解软链接和硬链接

我们对main.c进行硬链接发现main1.c main.c的文件第一例(操作系统在硬盘中寻址编号)的数字相等第三列的数字变为2。通过观察第一列的数据可以发现test.c 和 test的寻址空间是不一样的所以二者是俩个独立的文件。所以我们我们可以知道硬链接就是给寻址编号起别名,而第三列数据就是该寻址编号对应的文件名数目。我们对test 使用cat 命令可以发现,能看见test.c 里面的内容。中的做法,如果类比到Windows我们可以理解为是一种快捷方式。那么二者之间有什么关系?

2024-04-26 20:26:35 106 1

原创 理解文件系统

文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被。2 表示硬链接数(一种被可被系统识别的文件编号(inode)对应的文件名数目):块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下。时间,最近一次检验磁盘的时间等其他文件系统的相关信息。的大小是由格式化的时候确定的,并且不可以更改。):存放文件系统本身的结构信息。的大小,最近一次挂载的时间,最近一次写入数据的。5 文件的大小(单位字节)6文件最后一次被修改的时间。的信息被破坏,可以说整个。

2024-04-26 20:03:18 237 1

原创 文件缓冲区

我们想磁盘中写入数据发现有俩份,这其实是因为子进程会继承父进程的代码和数据,当其中一个进程要刷新缓冲区的时候会发生写时拷贝,所以当父子进程结束是会有俩份数据。我们在读写文件时数据不会直接传输,会先存储到缓冲区之中,然后再以特定的刷新策略,把数据冲文件的缓冲区中刷新出来。2. 行刷新(遇到\n就会触发刷新机制连同\n在内的所有数据全部刷新出去)对应实例 显示器。文件缓冲区其实是一段内存,他不是有操作系统维护的,是由上层的语言库维护。3. 满内存刷新(数据缓冲区达到数据存取的上限)对应实例 磁盘。

2024-04-25 14:10:00 141 2

空空如也

空空如也

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

TA关注的人

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