- 博客(30)
- 收藏
- 关注
原创 网络层 UDP协议与TCP协议详解
网络层 UDP协议与TCP协议详解1. UDP协议UDP(User Datagram Protocol 用户数据报协议,是不可靠的数据报传输协议,不确保数据安全有序的到达对端。特点:传输层协议无连接:知道对端的IP和端口号就直接进行传输, 不需要建立连接。不可靠传输:没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息。面向数据报:不能够灵活的控制读写数据的次数和数量。1. 协议格式16位源端口号:数据从哪个端口发送出来
2022-02-23 14:59:08
1669
1
原创 HTTP协议详解
HTTP协议详解1. 认识HTTP协议超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发
2022-02-08 14:28:38
2701
原创 网络套接字编程
网络套接字编程一、 认识UDP协议UDP(User Datagram Protocol 用户数据报协议,是不可靠的数据报传输协议,不确保数据安全有序的到达对端。特点:传输层协议无连接不可靠传输面向数据报应用场景:性能要求大于安全要求,比如视频传输。二、UDP通信程序的编写0. 前提a. 什么是套接字编程就是网络通信程序的编写,网络中的各种通信,都是用户与服务器之间的通信,不存在用户与用户之间的直接通信。也不存在服务器和服务器之间的直接通信。b. 网络通信都是两端主机之间的通信:
2022-01-29 16:29:49
2510
原创 网络编程基础
网络编程基础一、网络发展背景独立模式:每台计算机相对独立。无法共同处理任务。网络互联:多台计算机连接在一起,完成数据共享。共享数据由一个主机完成管理。局域网:连接的终端越来越多,通过交换机和路由器将更多台计算机连接在一起。广域网:将远隔千里的计算机全部连接在一起(把各个局域网连接在一起)。二、IP地址IP地址是每一台计算机在网络中的唯一标识。**ipv4:**uint32_t类型的整数,不到43亿。也就是说地球上如果每个人一个计算机,IP地址根本不够分配。DHCP - 动态地址分
2022-01-25 10:10:12
131
原创 c++多态
C++多态一、多态的概念通俗来说多态就是具有多种形态,就是去完成一个特定的行为,不同的对象会有不同的完成方法,或者产生不同的状态。比如:买票行为,普通人买票就是去全价票;学生买票就是半价票;军人买票就是优惠票。二、多态的构成条件1. 构成条件多态是在不同继承的的类对象中调用同一函数,产生了不同的行为。在继承中药构成多态有两个必要的条件必须通过父类的指针或者引用调用虚函数。被调用的函数必须是虚函数,而且在子类中,这个虚函数必须进行重写。2. 虚函数被virtual修饰的类成员函数称为虚
2022-01-20 21:51:37
237
原创 c++继承
继承一、继承的概念和定义继承是面向对象程序设计中使代码可以复用的手段,他是在原有类(也叫父类,基类)的基础上进行扩展增加功能,这样产生的新类叫做派生类,也叫子类。class Person{public: void print() { std::cout << name << std::endl; std::cout << _age << std::endl; }protected: s
2022-01-20 21:44:10
498
原创 Linux多线程
Linux多线程一、线程的概念线程是进程中的一条执行流,线程在进程的地址空间内运行但是因为Linux下执行流是通过PCB实现的,一个进程中可以有多个执行流,也就是一个进程中可以有多个PCB,并且这些PCB共享了很多程序运行所需资源,因此Linux下的PCB就起了一个新名字—轻量级进程。二、进程和线程的区别进程是操作系统进行资源分配的基本单元。线程是操作系统进行CPU调度的基本单元。线程是进程中的一条执行流,是CPU调度的基本单元,因为Linux下执行流是通过PCB实现的,因此Linux下的线程实
2021-12-06 16:30:31
516
原创 生产者消费者模型
生产者与消费者模型一种特殊的设计模式针对场景有大量数据的产生以及处理的场景。生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的生产者与消费者模型的优点解耦合、支持并发、支持忙闲不均实现生产者与消费者无非
2021-12-01 18:05:42
91
原创 Linux进程概念
一、冯诺依曼体系结构:现代计算机的硬件体系结构(规定了现代计算机应该具有那些硬件单元)包含了五大硬件单元:输入设备:鼠标,键盘,麦克风等输出设备:显示器,打印机等存储器:内存条运算器:中央处理器—cpu控制器:中央处理器—cpu注意:图中存储器指的是内存不考虑缓存情况,CPU智能对内存就行读写,不能直接访问输入和输出设备也就是说,所有的计算机硬件全部围绕存储器工作,存储器在中间起到数据缓冲的作用。使用内存作为存储器的原因:内存的吞吐量大。存储器分内存和外存,是因为没有一种
2021-10-17 16:37:43
558
原创 双链表实现
双链表的实现1.双链表结构2.双链表定义typedef int DClistDataType;//定义节点类型typedef struct DClistNode{ DClistDataType data; struct DClistNode* next; struct DClistNode* prev;}DClistNode;typedef struct DClist{ DClistNode* head;}DClist;3.接口的实现//函数声明void D
2021-08-20 16:49:33
108
原创 删除链表中的重复节点
链接:删除链表中的重复节点解题思路一个有序的链表中,把重复的节点全部删除,我们需要创建三个节点,cur表示当前节点,prev表示当前节点前最后一个访问的不重复节点,next表示当前节点的下一个节点,也就是与当前节点重复的第一个节点,如果当前节点和它后面的几个结点数值相同,那么这些结点都要被剔除,然后更新cur和next;如果不相同,则直接更新cur和next。需要考虑的是,如果第一个结点是重复结点,那么就把头指针pHead也更新一下,更新到第一个不重复的节点。ListNode* deleteDu
2021-08-18 21:06:58
393
原创 单链表的实现
单链表的实现1.链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。结构:注意:从图中可以看出来,链式结构在逻辑上是连续的,但是在物理上不一定连续。链表中的节点一般都是在堆上申请出来的。2.链表的分类单项或者双向链表:带头或者不带头:循环或者非循环:3.单链表定义typedef int listDataType;//定义节点类型typedef struct listNode{ li
2021-08-18 17:27:39
209
原创 顺序表的实现
顺序表的实现1.概念顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。2.顺序表定义typedef int seqDataType;//顺序表定义typedef struct seqList{ seqDataType* data; int capacity; int size;}seqList;3.接口的实现//函数声明void seqListInit(seqList* sl,int ca
2021-08-13 18:55:59
93
原创 C语言 文件操作
C语言 文件操作一、什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。1.1 程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。1.2 数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。本章讨论的是数据文件。1.3文件名一个文件要有一个唯一的文件标识,以便用户识别和引用。文
2021-07-24 23:19:30
229
原创 函数递归详解
函数递归什么是递归递归就是程序调用自身,一个函数在其定义或声明的时候,有直接或者间接调用其自身的一种方法。递归通常用于将一个复杂的问题层层转化,最终形成一个和这个复杂问题相似的规模较小的问题来解决。递归的运用只需要少量的代码就可以描述出解题过程中所需要的复杂思路,大大的减少了程序的代码量,递归的主要思想:把大事化小。递归的必要条件存在限制条件,当满足这个限制条件的时候,递归则不再继续。每次递归之后,越来越接近这个限制条件。递归的实现1.接受一个整形值,按顺序打印它的每一位。如:1234
2021-06-05 19:42:01
1416
原创 C++泛型编程 -- 模板初识
泛型编程比如一个交换函数void Swap(int& a, int& b){ int tem = a; a = b; b = tem;}这个函数只适用于传入的参数是int类型的,如果我们传入的是char,double,自定义类型的数据,虽然可以使用函数重载来实现,但是这样代码的复用率比较低,只要有新的类型出现的时候我们就需要再写一个对应的函数,可维护性比较低。那能否告诉编译器一个模子,让编译器根据不同的类型利用这个模子来生成对应的代码呢?函数模板基本格式templa
2021-05-18 19:27:26
212
原创 C++ new/delete和malloc/free区别
mallco/free在C语言中,动态申请内存都是在堆上申请的空间,主要的方法就是malloc。malloc:函数原型void* malloc(size_t size) 参数size为要分配的字节数,返回值我们需要自己强转程我们需要的类型,申请成功会返回开辟空间的首地址,失败返回NULL。申请到的空间每一个都是随机值,并不能完成初始化。int* mptr = (int*)malloc(sizeof(int));free(mptr);new/deletenew和delete都是C++中的关键字
2021-05-17 18:32:31
162
原创 Linux 进程信号
进程信号概念:信号就是软件中断。用于向进程通知某个事件的发生,打断进程当前的操作,去处理这个事件。Linux中信号的种类:62中1~31号:非可靠信号,有可能会造成事件丢失。34~64号:可靠信号,不会丢失事件。信号的生命周期产生信号–》在进程pcb中注册信号–》注销信号–》处理信号信号的产生硬件产生:ctrl + c;ctrl + | ;ctrl + z;软件产生:kill命令发送信号给指定进程 kill -signum pidint kill(pid_t pid, int sig
2021-05-03 19:01:24
201
原创 Linux 进程间通信 二、共享内存
共享内存开辟一块儿物理内存空间,各个进程将这块物理内存通过页表映射到自己的虚拟内存空间中,通过访问虚拟地址,实现对物理内存的控制,进而实现数据共享。是进程间通信中最快的一种方式。1.创建或打开共享内存:int shmget(key_t key, size_t size, int shmflg);key:标识符,通过标识符,多个进程可以打开同一块儿共享内存,实现数据通信。size:要创建的共享内存大小,如果共享内存已经存在,则忽略这个参数。shmflg:打开方式+权限 IPC_CREAT | IP
2021-05-01 13:21:02
487
原创 Linux 进程间通信 一、管道
进程间通信进程之间无法直接通信,因为每个进程都有自己的独立的虚拟地址空间,访问的都是自己的虚拟地址。如果将一号进程的虚拟地址传给二号进程,通过二号进程的页表来映射,并不能映射到正确的物理地址空间。所以两个进程的映射关系并不同,具有独立性,因此无法直接通信。进程间通信的原理:操作系统为进程间提供一个公共的传输媒介,实现公共访问,进而实现进程间通信。操作系统根据需求不同提供了不同的进程间通信的方式:管道共享内存消息队列信号量管道特性:半双工通信,就是可以选择方向的单向通信。本质:系统内核
2021-04-26 19:50:45
156
原创 C++类和对象 二、6个默认成员函数
6个默认成员函数当我们定义一个空类的时候,类中并不是什么都没有,而是会默认自动生成六个成员函数。构造函数作用:构造函数会初始化对象的内容。不是创造对象,而是在创建对象的时候调用,用来初始化对象的内容。特征:函数名与类名相同。无返回值。对象实例化的时候,编译器自动调用对应的构造函数,并且在对象的生命周期内只会调用一次构造函数。构造函数可以重载。如果我们没有显示定义一个构造函数,编译器就会自动生成一个无参构造并自动调用。无参构造和全缺省构造函数都属于默认构造,一个类中只能拥有一个默认构造
2021-04-20 15:36:23
182
原创 C++类和对象 一、初识类和对象
类和对象的初步认识C语言是一门面向过程的语言,注重解决问题的过程,先构造好解决问题的思路,然后利用函数一步一步的解决问题。C++是一门面向对象的语言,重点关注的是对象,完成一件事情靠对象之间的交互来完成。类的定义定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。class A{public: void Printf() { cout << _a <
2021-04-18 21:52:54
180
1
原创 Linux基础IO 二、系统调用IO接口
int open(const char *pathname, int flags, mode_t mode);pathname:要打开的文件路径名。flags:必选其一的选项:O_RDONLY;O_WRONLY;O_RDWRO_RDONLY:只读文件;O_WRONLY:只写文件;O_RDWR:可读可写文件可选项:O_CREAT;O_EXCL;O_TRUNC;O_APPENDO_CREAT:文件不存在,则创建新文件;O_EXCL:搭配O_CREAT使用,
2021-04-18 16:52:02
145
原创 Linux 基础IO 一、库函数IO接口
FILE *fopen (const char *path, const char * mode)path:要打开的文件路径名。mode:打开方式,包括:r,r+,w,w+,a,a+,b。r:只读;r+:可读可写;w:只写,不存在则创建新文件;w+:可读可写,不存在则创建新文件;a:追加只写,总是将数据写入文件末尾,不存在则创建新文件;a+:追加可读可写,总是将数据写入文件末尾,不存在则创建新文件;b+:对文件进行二进制操作;返回值:失败返回NULL,成功则返回文件留置针FILE*。
2021-04-15 21:33:39
209
1
原创 模拟Linux下shell功能,实现简易的minishell
什么是shellShell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。编写思路捕捉键盘输入的信息。解析输入信息:将键盘的输入信息解析成 命令名称+运行参数创建子进程:让子进程运行对应名称的程序。(程序替换)等待子进程退出。代码实现#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string
2021-04-14 14:22:22
235
原创 Linux进程控制
进程退出就是结束一个进程的运行1. return在C语言中,main函数内部我们总会写一个 return 0; 来作为结尾,这就是退出main函数的标志。#include <stdio.h>int main (){ printf("hello world\n"); return 0;}2. void exit (int status)exit 函数是一个库函数,用于在任意位置退出一个进程。#include <stdio.h>#include <un
2021-04-11 15:43:48
344
1
原创 Linux程序地址空间
程序地址空间地址:通常所说的的地址,都是内存的地址,是内存单元的编号。但是我们所使用的硬件内存中,真的存在这些划分吗? 我们通过代码来探究一下。#include <stdio.h>#include <unistd.h>int g_val = 100; //创建一个全局变量 g_valint main (){ pid_t pid = fork(); if (pid < 0) { return -1; //创建子进程失败 } else if (p
2021-04-07 20:32:10
227
1
原创 Linux环境变量
环境变量环境变量就是配置系统运行环境参数的变量,使程序运行环境配置更加灵活,以及可以通过环境变量实现进程间的小量数据通信。(父子进程的传递)环境变量的操作env:查看环境变量set:查看所有变量,包括普通变量和环境变量echo:查看单个环境变量的内容export:设置一个环境变量unset:删除一个环境变量env:创建普通变量和环境变量:MYVAL为普通变量,MYVAL2为环境变量,所以用set命令可以查找到两个变量,而使用env查找的时候只能找到环境变量MYVAL2。代码操作
2021-04-07 11:46:42
187
原创 Linux下缓冲区的作用(将输出结果打印到终端)
标准输出设备我们知道C语言中,printf函数是将程序运行后要输出的内容在显示器中显示,也就是将内容打印到输出设备显示器上。然而在Linux中有一个重要的概念就是Linux系统下一切皆文件,也就是说在Linux中,把显示器当做文件类型进行操作,数据才能够被打印到显示器上,其中,打印到显示器被称为标准输出设备。打印的内容是如何显示到显示器上的其实当我们每次要打印数据时,并不是将数据直接发送给标准输出设备,也就是并直接发送给显示器,而是将要打印的数据先存放到缓冲区,当缓冲区数据满时,或者程序结束时,或者手
2021-04-03 21:09:03
2637
3
原创 Linux下make/Makefile项目自动化构建工具
Linux下make/Makefile项目自动化构建工具了解make和MakefileMakefile的编写规则make的执行规则实际用法项目构建的主要过程了解make和MakefileMakefile:是一个文本文件,记录的是一个项目的构建规则流程。make:是一个工具,用来执行Makefile文本中的相关动作,如编译、链接等。简单来说就是用Makefile编辑好想要执行的命令,然后用make来执行Makefi里面的命令,不用再去一步一步的输入。Makefile的编写规则目标
2021-04-01 17:02:15
3840
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人