自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高级IO--poll,epoll

poll接口流程介绍:int poll(struct pollfd* fds, nfds_t nfds, int timeout); fds: 要监控的描述符事件结构体 struct poll{ int nfds; //要监控的描述符   short events; //想要监控的事件   short revents; //实际就绪的事件} events: POLLIN----可读  POLLOUT----可写 revents:当poll接口调用返回的时候,这个描述符实际就绪的事件就会被写入r

2020-09-03 19:10:11 161

原创 高级IO--select

高级IO:IO概念 / 类型 / 处理流程 / 多路转接IO的实现模型四种典型IO:阻塞IO, 非阻塞IO, 信号驱动IO,异步IOIO过程:发起IO调用,等待IO条件就绪, 进行数据拷贝 阻塞IO:发起IO调用,若IO就绪条件不满足,则一直等待优点:流程简单,一个IO完成后进行下一个缺点:无法充分利用资源,效率较为低下 非阻塞IO:发起IO条件,若IO就绪条件不满足在,则报错返回优点:相较于阻塞IO,对资源利用较为充分,可以利用就绪等待时间干点其他事情或者发起另一个I

2020-08-08 15:59:19 116

原创 AVL树关于不平衡旋转问题

#include<iostream>#include<vector>using namespace std;template<class K, class V>struct AVLTreeNode { AVLTreeNode(const pair<K, V>& kv) :_pLeft(nullptr), _pRight(nullptr), _pParent(nullptr), _kv(kv), _bf(0) {}; AVLTreeNode

2020-07-29 16:37:09 263

原创 STL_stack

namespace wh { template<class T, class Container> class stack { public: void push(const T& x) { _con.push_back(x); } void pop() { _con.pop_back(); } int size() { return _con.size(); } T& top() { return _con.bac

2020-07-29 16:35:02 101

原创 STL_List

namespace wh { template<class T> struct _list_node { _list_node<T>* _prev; _list_node<T>* _next; T _data; _list_node(const T& x = T()) :_data(x), _prev(nullptr), _next(nullptr) {} }; template<class T, class Ref, class

2020-07-29 16:26:52 76

原创 栈的实现

//Stack.h#pragma once#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef int STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack;// 初始化栈 void StackInit(Stack* ps);// 入栈 v

2020-07-29 16:06:14 66

原创 顺序表的实现

//SeqList.h#pragma once#include<stdio.h>#include<assert.h>#include<malloc.h>typedef int ElemType;typedef struct SeqList { ElemType* data; int size; // 有效数据的个数 int capacity; // 数组的容量}SeqList;void SeqListInit(SeqList* ps

2020-07-29 16:04:11 83

原创 硬链接与软链接

硬链接为源文件创建一个硬链接,通过硬链接文件来操纵源文件与源文件共用一个inode节点,相当于源文件的别名,通过自己的inode节点访问源文件数据ln test.txt test.hard 软链接为源文件创建一个软链接,通过软链接文件来操纵源文件本质上是一个独立的文件,有自己的inode节点,文件数据保存源文件的路径,通过这个路径访问源文件数据软链接可以跨分区,硬链接不可以ln -s test.txt test.soft 硬链接与软链接区别删除源文件,软链接失效,硬链接的链接数只.

2020-07-29 16:02:00 66

原创 C语言操作符总结

c语言操作符详解c语言操作符算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符逗号表达式 算术操作符          +  - * / % 1. /操作符 如果左右两边为整数,则输出也为整数,如果要输出浮点数,那么左右两边要有一个为浮点数2.%操作符的两边必须要为整数移位操作符 <<   左移操作符>> ...

2020-07-29 16:01:20 87

原创 队列的实现

//Queue.h#pragma once#include<stdio.h>#include<malloc.h>#include<assert.h>typedef int QDataType;typedef struct QListNode{ QDataType _data; struct QListNode* _next;}QNode;// 队列的结构 typedef struct Queue{ QNode* _front; QNod

2020-07-29 16:00:44 99

原创 堆的实现

//Heap.h#pragma once#include <stdio.h>#include<assert.h>typedef int HpDataType;typedef struct Heap{ HpDataType* _a; size_t _size; size_t _capacity;}Heap;void InitHeap(Heap* hp);// 堆的构建Heap* HeapCreate(HpDataType* a, siz

2020-07-29 16:00:24 102

原创 有关链表的实现(单向/双向 + 不带头/带头 + 非循环/循环)

//LinkList.h 单向不带头非循环#pragma once#include<stdio.h>#include<malloc.h>#include<assert.h>typedef int ElementType;typedef struct LinkList { ElementType e; struct LinkList* next;}LinkList;/*初始化链表*/void InitLinkList(LinkList** LL

2020-07-29 15:58:25 73

原创 二叉树实现

//BinaryTree.h#pragma once#include<stdio.h>#include<malloc.h>typedef char BTDataType;typedef struct BinaryTreeNode{ BTDataType _data; struct BinaryTreeNode* _left; struct BinaryTreeNode* _right;}BTNode;#include"Queue.h"// 通过前序遍

2020-07-29 15:51:54 90

原创 进程间通信-2

进程间通信二 共享内存 特性:1.共享内存是最快的进程间通信方式2.生命周期随内核注意: 共享内存并没有自带同步与互斥----多个进程访问的时候存在安全问题操作:代码操作流程/具体的代码 + 命令操作ipcs / ipcrm本质原理:在物理内存上开辟一块内存空间,多个进程可以将同一块物理内存映射到自己的虚拟地址空间,通过自己的虚拟地址直接访问这块空间,通过这种方式实现数据共享。   管道中的通信:涉及到两次用户态与内核态之间的数据拷贝;将数据写入管道,从管道读取数据。   ..

2020-07-29 15:46:13 82

原创 优先级队列实现

namespace wh { template<class T, class Container = vector<T>, class compare = wh::less<T>> class priority_queue { public: void push(const T& x) { _con.push_back(x); AdjustUp(_con.size() - 1); } void pop() { swap(_co

2020-07-29 15:45:45 59

原创 进程信号-2

进程信号默认处理方式调用的函数与忽略处理方式调用的函数都是系统中已经实现的----内核中直接处理自定义信号处理方式:用户自己写一个事件处理函数;在内核中有一个信号处理动作数组信号的阻塞:并不是不接收信号。信号依旧可以注册,只是表示哪些信号暂时不处理  在PCB中有一个位图,位图叫block----阻塞信号集合;这个集合中的信号如果来了(添加到pending位图)则暂时不处理...

2020-07-29 15:45:28 70

原创 进程信号-1

进程信号是什么?信号是一个软件中断;作用: 操作系统通过信号告诉进程发生了某个事件,打断进程当前操作,去处理这个事件  生活中信号多种多样,并且肯定是一个信号对应一个事件,并且我们肯定能识别这个信号操作系统中信号也同样如此:通过kill -l命令可以查看系统中的信号种类 ---- 62 种1~31号信号:从unix借鉴而来的,每个信号都有具体对应的系统事件;----非可靠信号(有可能会信号丢失—事件丢失)34~64号信号:后期扩充的,因为没有具体对应的事件,所以命名比较草率----可靠信号(.

2020-07-29 15:43:36 150

原创 进程间通信-1

进程间通信IPC : 操作系统为用户提供的几种进程通信方式1.为什么操作系统要为用户提供进程间通信方式呢?  因为进程的独立性(每个进程都有自己的独立虚拟地址空间,操作的都是自己的地址),因此进程间无法直接通信2.如何提供进程间通信方式  给多个进程之间提供一个大家都能访问到的传播介质。并且操作系统在提供进程间通信方式的时候也根据通信场景的不同提供不同方式  从unix借鉴而来: 管道----资源传输  systemV标准的进程间通信方式:共享内存   消息队列  信号量管道 传输资源..

2020-07-29 15:41:00 65

原创 多线程概念,线程控制

多线程线程概念:进行多任务处理多任务处理:多创建几个进程,一个进程就有一个pcb,能够串行化的完成一个任务,在一个进程创建多个pcb,因为pcb是调度程序运行的描述,因此有多少个pcb就会有多少个执行流程多进程多线程最早的时候,进程就是一个pcb,操作系统通过pcb实现调度管理;然而学习多线程,因为线程是进程中的一个执行流,并且这些pcb共用同一个虚拟地址,这些pcb更加轻量化,因此也被称为轻量级进程在linux中,pcb就是调度程序运行的描述,一个pcb就可以调度一段程序的运行;创.

2020-07-29 15:37:44 116

原创 string实现

#define _CRT_SECURE_NO_WARNINGS 0#include<iostream>#include<cstring>using namespace std;namespace test { class string { public: typedef char* iterator; /*输入输出重载*/ friend ostream& operator<<(ostream& _cout, const test

2020-07-29 15:30:09 55

原创 动态库/静态库的打包和使用

库文件: 打包了一堆实现了的常用代码 1.将各个.c文件编译成为目标文件gcc -c child.c -o child.o动态库的打包gcc -c -fPIC child.c -o child.ogcc -shared child.o -o libmychild.so动态库的命名方式: libxxx.so静态库的打包gcc -c child.c -o child.oar -cr libmychild.a child.o静态库的命名方式: libxxx.aldd main查看.

2020-07-29 15:29:33 391

原创 计算机网络--网络层/链路层

网络层:负责地址管理和路由选择;ip协议格式:地址管理  IP地址:ipv4/ipv6  ipv4-uint32_t ---- 总共不到43e个IP地址,用于在网络中表示唯一主机  我们在上网的时候,应该如何分配IP地址:手动分配/计算机进行分配  IP地址分配的如何做到,所有的主机都不会分配冲突?----划分网络进行分配划分网络:每个小网络给自己网络中的主机分配固定的某些IP地址,只要保证每个网络之间固定分配的IP不冲突IP地址组成: 网络号 + 主机号网络号:是一个网络的标识,这个

2020-07-23 22:45:03 271

原创 计算机网络--传输层

传输层:负责应用之间的数据传输(通过端口的描述 - -描述哪两个进程在进行通信)- -UDP/TCPUDP:无连接,不可靠,面向数据报  udp协议格式:特性解析: 无连接:不需要建立连接,只要知道对方的地址信息就能直接发送数据 不可靠:udp在传输层不保证数据安全有序的到达对端- - -需要程序员在应用层进行包序管理 面向数据报:有最大长度限制的传输方式- - -取决于数据报长度字段,因为长度字段只有16位,因此数据报总长度不能大于64k,因此若要传输的数据比较大,则需要程序员在应用层进行分

2020-07-20 18:47:51 148

原创 计算机网络--应用层

应用层: 直面程序员的一层,因为应用程序是程序员自己写的,因此应用层的协议都是程序员自己定的自定义协议 程序员自己根据自己应用的特点,定义协议(数据格式/数据描述信息)eg:以一个简单的网络版计算机为例 功能:客户端发送两个数字以及一个运算符给服务端,服务端获取到数据然后进行运算int num1; int num2; char op;num1, num2, op ----将所有的数据转成字符串,使用特殊字符间隔;这时候就将数据按照指定协议组织起来了.采用结构体构造二进制数据串struct

2020-07-14 17:47:32 134

原创 socket编程

 UDP协议:向应用程序提供一种面向无连接的服务 TCP协议:提供一种面向连接的,可靠的数据传输服务网络通信程序编写时,到底传输层使用UDP好还是TCP?TCP ---- 传输控制协议 ——面向连接,可靠传输,面向字节流UDP ----用户数据报协议——面向无连接,不可靠传输,面向数据包TCP保证可靠传输,但是传输速度没有UDP快。TCP应用于安全性要求高 / UDP应用于实时性高的场景socket套接字编程:网络程序的编写udp通信编程:客户端不主动绑定端口地址,是为了降低端口冲突的

2020-07-11 16:37:08 130

原创 vector实现

namespace wh{ template<class T> class vector { public: typedef T* iterator; typedef T* const_iterator; vector() : _start(0), _finish(0), _endofstorage(0) {}//缺省参数构造函数 vector(const vector<T>& v) : _start(0), _finish(0), _endofstor

2020-07-01 17:27:14 77

原创 网络基础

网络基础网络发展背景网络的划分:局域网(覆盖范围在1000m) / 城域网(覆盖范围在20km)/广域网(大于20km) 互联网 / 因特网 — 更大的国际性的广域网 以太网 / 令牌环网 — 组网方式互联网是一种复杂的星型网络---- 容灾性更强IP地址IP地址:uint32_t ----无符号4字节整数 在网络中作为主机的唯一标识 ---- 网络主机之间的定位(哪个主机与哪个主机之间进行通信) -----通过IP地址进行标识 网络中每条数据中都会包含源端IP地址 / 对端IP地址

2020-07-01 11:14:24 83

原创 多线程,线程安全

文章目录多线程线程安全线程安全的实现多线程线程安全线程安全:多个执行流对临界资源争抢访问,但是不会出现数据二义性线程安全的实现 同步:通过条件判断保证对临界资源访问的合理性 互斥:通过同一时间对临界资源访问的唯一性实现临界资源访问的安全性同步是如何实现/互斥又是如何实现? 互斥的实现:互斥锁  互斥锁实现互斥原理:互斥锁本身是一个只有0/1的计数器,描述了一个临界资源当前的访问状态,所有执行流在访问临界资源资源都需要判断当前的临界资源状态是否允许访问,如果不允许则让执行流等待,否则可以让

2020-06-20 19:09:47 109

原创 线程,信号量

多线程信号量信号量:可以实现进程/线程间同步与互斥。信号本质就是一个计数器 + pcb等待队列信号量同步的实现: 通过自身的计数器对资源进行计数,并且通过计数器的资源计数,判断进程/线程是否能够符合访问资源的条件,若符合就可以访问,若不符合则提供的接口使进程/线程阻塞;其他进程/线程促使条件满足之后,可以唤醒pcb等待队列上的pcb信号量互斥的实现: 保证计数器的计数不大于1,保证了资源只有一个,同一时间只有一个进程/线程能够访问资源,实现互斥。代码操作1.定义信号量:```sem_t``

2020-06-20 19:06:37 521

原创 C语言实现扫雷

写一个简单的程序实现扫雷游戏首先先创建头文件定义常量,以及引入的库文件#define _CRT_SECURE_NO_WARNINGS 1 ...

2020-05-31 11:47:07 156

空空如也

空空如也

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

TA关注的人

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