自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络_高级IO_epoll

为处理大批量句柄而做了改进的pollepoll解决了poll,select实现不了的问题 epoll相关的系统调用1.创建一个epoll的句柄size可以被忽略,用完之后必须调用close()关闭 2.epoll的事件注册函数不同于select()是在监听事件时告诉内核要监听什么类型的事件,而是先注册要监听的事件类型epfd:epoll_create的返...

2018-09-02 22:42:21 173

原创 网络_高级IO_select

IP地址+端口号用来标识网络上的某一台主机的某一个进程一个端口号只能被一个进程使用 两个重要的传输层协议TCP协议:有连接,可靠,面向字节流UDP协议:无连接,不可靠,面向数据报 网络字节序:发送主机通常将发送缓冲区的数据按内存地址从低到高的顺序发出,接收缓冲区接收到数据之后,也是按照从低到高的地址依次保存。网络数据流的地址规定:先发低字节,后发数据是高地址...

2018-09-02 14:24:52 218

原创 网络_基础知识

局域网LAN:计算机之间通过交换机和路由器连接在一起广域网WAN:将远隔千里的计算机连在一起计算机之间的传输媒介是光信号和电信号 TCP/IP五层模型 数据包的封装和分用1.不同的协议层对数据包有不同的称谓,在传输层叫做段,在网络层叫数据报,在链路层叫做帧2.应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部,称为封装3.首部信息中一般包含了首...

2018-09-02 14:18:21 425

原创 C++_实现STL中的string类

深拷贝string类#include <iostream>#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;namespace DPcopy{ class String {...

2018-08-04 10:28:35 443

原创 C++_缺省参数&重载&引用&命名空间

C++1.在C语言中函数默认返回int类型,C++默认返回viod2.在C语言中,函数没有指定参数列表,默认可以接收多个参数,在C++中因为有严格的参数类型检测,没有指定参数列表,默认为void,不接受任何参数3. C语言要求的局部变量声明必须在所有的可执行语句之前,而C++没有这个限制引入第一个概念一.缺省参数(调用约定 _cdecl)概念:缺省参数是声明或定义函数时...

2018-08-02 11:36:03 242

原创 C++_类和对象

一.封装性(访问限定符实现) 数据和方法封装到一起 访问限定符     三种访问限定符:public,protected,private    1.public成员可从类外直接访问,private/protected成员不能从类外直接访问    2.访问限定符的作用域是从出现到下一个限定符出现之前,或者到类体的结束前    3.类体中如果没有访问限定符,默认priv...

2018-08-02 11:23:50 269

原创 Linux_线程池

一.功能   线程池中有若干个线程,用于执行大量相对短暂的任务二.功能描述  计算密集型任务:线程池中线程个数=CPU个数  I/O密集型任务:线程池中线程个数>CPU个数  当任务增加时,可以动态增加线程池中线程个数,当任务执行完成后,可以动态减少线程池中线程个数  运用生产消费者模型,生产者线程向任务队列中添加任务,任务队列中如果没有任务,如果有等待线程就唤醒并执...

2018-07-26 18:01:57 138

原创 Linux_*线程同步与互斥*

一.互斥量   1.作用:因为线程可以共享资源,所以多个线程可以同时访问一块资源。多个线程操作共享变量时,可以有序进行,不会对变量同时修改   2.互斥量的接口      定义互斥量-->初始化互斥量-->上锁-->解锁-->销毁      来不及解释了,直接上代码(一个简易的售票系统) 1 #include <stdio.h> 2 ...

2018-07-25 17:58:11 211

原创 Linux_线程**

一.线程概念(也叫轻量级进程)  1.在一个程序中的一条执行路线就叫做线程,更准确的说:线程是进程的一个内部的控制序列  2.一个进程中至少有一个执行线程(控制序列)二.线程和进程的区别  1.进程是资源分配的基本单位,也是调度运行的基本单位,是系统中并发执行的单位。  2.线程是进程中执行运算的最小单位  3.线程共享进程的所有数据(内存和资源),但它也有自己一部分独立的...

2018-07-25 11:52:13 138

原创 Linux_信号

一.信号的概念和特点    1.信号:Linux系统响应某些状况而产生的事件。进程在接收信号后会采取相应的动作    2.查看所有信号的命令:kill -l    3.信号常见的处理方式:          a)忽略此信号          b)执行该信号的默认处理动作          c)提供一个信号处理函数,要求内核在处理该信号时切换到用户态执行这个处理函数,这种方式...

2018-07-24 11:48:20 265

原创 Linux_进程间通信_4)信号量

一.本质    信号量就是一个计数器,用来计算可以资源的个数。也是一个等待队列,保存的是PCB指针。它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。二.作用    信号量主要用于进程的同步和互斥。    互斥:由于各个进程间要访问共享资源,而这些资源需要排他使用,因此各个进程之间要竞争使用这些资源,我们将这种关系称为进...

2018-07-22 18:58:03 350

原创 Linux_进程间通信_2)消息队列

一,本质     内核中提供的链表二.特性     1)消息队列提供了一个从一个进程向另外一个进程发送一块数据的方式(可用于任何进程之间)     2)每个数据块都被认为是有一个类型,接受者进程接受的数据块可以有不同的类型值5)     3)双向通信,全双工     4)面向数据报     5)内置了同步互斥机制     6)生命周期随内核(会一直存在,直到显式删除...

2018-07-19 18:13:34 181

原创 Linux_进程间通信_1)管道

一.进程间通信的背景及目的     1)背景            进程间具有独立性,直接交互并不方便,内核提供一个公共资源,多个进程通过这个公共资源进行交互     2)目的            数据传输,资源共享,通知事件,进程控制二.进程间通信的几种方式管道,消息队列,共享内存,信号量,信号三.管道  1.管道分类:匿名管道和命名管道  2.管道的概念:...

2018-07-18 11:39:23 196

原创 C++_类和对象(2)

 这篇文章主要说类的6个默认成员函数:    构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载、const修饰的取地址操作符重载一、构造函数    1)定义:构造函数是一个特殊的成员函数,作用就是保证每个数据都有一个合适的初始值,初始化成员变量。    2)构造函数特性        1>函数名和类名相同,且没有返回值        2>新对象被创建时,由编译器自动调...

2018-06-08 19:19:00 161

原创 C++_类和对象(1)

先来回顾一下结构体:结构体是一些数据的集合,这些数据可以是不同类型,在C语言中结构体中不能定义函数,在C++中结构体可以定义函数。结构体中有内存对齐问题,可以参考以前的文章:点击打开链接但在C++中,结构体中有函数的定义更喜欢用类(class)来表示。this指针,构造与析构,运算符重载和友元一、类的定义两种方式:1)类的声明和定义全在类体中                2)类的声明在.h文件中...

2018-06-07 17:12:44 181

原创 C++_引用和命名空间

一.引用    1.概念:引用不是定义一个新的变量,而是给已经存在的变量取了个别名,它和它引用的变量共用一块内存空间,编译器不会为它开辟新空间。    2.使用:类型& 引用变量名 = 引用实体    3.特性:    1>引用在定义时必须初始化                     2>一个变量可以有多个引用                     3>引用对象一旦确...

2018-06-07 11:54:23 1500

原创 C++_实现日期类

#include <iostream>using namespace std;class Date{public: friend int GetDaysofMonth(int year, int month); friend ostream& operator<<(ostream& _cout, const Date &d); Da...

2018-06-06 22:42:54 187

原创 Linux_动态库与静态库

一.静态库(.a)    1)定义:程序在编译链接时把库中的代码链接到可执行文件中。程序运行时不再需要静态库

2018-06-05 21:25:10 120

原创 Linux_文件系统结构

一.初步了解文件系统查看文件信息的两个指令  ls -l/statls -l所示的7列模式    硬链接数    文件所有者    组    大小    最后修改时间    文件名关于文件的inode    超级块:存放文件系统本身的结构信息    i节点表:存放文件属性。如文件大小.所有者...    数据区:存放文件内容二.创建文件的操作    1)存储属性:内核需要先寻找到一个空闲的i节点,...

2018-06-05 21:20:41 168

原创 Linux_基础IO

先复习一下以前C语言的几个IO函数1)fopen( #include <stdio.h> )     1>函数原型:FILE *fopen(const char *path, const char *mode);  mode-->打开方式     2>返回值:成功返回文件指针,失败返回NULL2)fread.fwrite( #include <stdio.h&g...

2018-06-05 11:38:18 184

原创 实现myshell--简易版

实现步骤:1.获取命令行2.解析命令行3.创建一个子进程4.替换子进程5.父进程等待回收子进程实现: #include <stdio.h> #include <stdlib.h> #include <sys/wait.h> #include <unistd.h> #include <string.h> #include <...

2018-06-05 10:15:47 265

原创 Linux_进程程序替换

进程程序替换    1)替换原理        用fork创建出子进程后执行的是和父进程相同的程序,可能执行的是不同的代码分支,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行,调用exec并不创建新的进程,所以调用exec前后该进程的id并不改变。简单来说,替换的其实是程序的代码和数据,PCB还...

2018-06-01 21:28:45 376

原创 Linux_进程的终止和等待

一.进程终止1.进程的终止分3种情况    1)代码执行完,结果正确(结果看退出码,结果正确退出码为0)    2)代码执行完,结果不正确(退出码非0)    3)代码没执行完,进程异常终止。2.正常退出的3种方式    1)exit :执行的3个步骤 :执行用户通过atexit或on_exit定义的清理函数--->刷新输出缓存--->调用_exit    2)main函数的retur...

2018-05-31 11:31:20 874

原创 Linux_进程的创建

之前了解了进程的相关基础知识,现在来了解一下进程的实际应用1进程创建的一般过程:    1)给新进程分配一个标识符。内核中分配一个PCB    2)复制父进程的环境    3)分配程序.数据.栈等内存资源    4)复制父进程的地址空间的内容    5)将进程置成就绪状态,放入就绪队列2.fork    1)首先调用fork之前,要加头文件#include <unistd.h>    ...

2018-05-30 22:26:03 202

原创 Linux_进程的相关概念整理

1.进程的概念:简单来说,就是正在执行的程序。从内核的角度看,分配系统资源的实体。2.PCB说到进程肯定要提PCB,PCB是一种数据结构(也是C语言中的结构体),负责存储进程信息,每个进程都有自己的PCB,在fork子进程时,子进程在创建自己的PCB时,会从父进程的PCB中继承一部分信息,PCB也是对进程控制的唯一且最有效的方法。3.PCB中的内容分类    1)标识符 :描述进程的唯一标识符,用...

2018-05-30 11:18:28 182

原创 Linux_进程控制

1. 学习进程创建, 等待, 终止. 使用代码实现. 创建进程  fork函数等待进程  wait函数    pid_t wait (int *states)终止进程异常退出1)ctrl+c2)abort()函数正常退出:2.main 的return            1.exit  1)调用退出处理程序                 2)刷新输出缓存                 3)调...

2018-04-06 17:02:25 104

原创 Linux_进程

1. 调研进程的调度算法. 初步了解一下进程进程概念:(1)从用户角度看,进程是程序的一次动态的执行过程(放在内存中的)(2)从内核角度进程是分配CPU,内存等系统资源的基本单位从每个进程都有自己独立的虚拟地址空间(4G)和运行状态进程是系统分配资源的最小单位进程是程序的一次动态执行过程,需要对进程的现场信息进行维护,就需要相应的数据结构对应着C语言的结构体。这个结构体叫PCB进程创建的一般过程1...

2018-04-01 10:34:12 155

原创 Linux之开发工具

1. 除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点. vim编辑器vim是一款复杂的编辑器,功能强大。vim编辑器是Unix系统最初的编辑器nano编辑器作为一款简单易用的控制台模式文本编辑器,nano很适合对此类编辑器有需求的用户。对Linux命令行新手来说,它用起来也很不错。nano文本编辑器是Unix系统的Pico编辑器的克隆饭。emacs编辑器ema...

2018-03-30 17:09:23 745

原创 Linux中的目录和命令

Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp (1)/proc:进程目录,存放现有硬件和当前进程的相关信息。这个目录采用一种特殊的文件格式(proc格式,内核支持这种格式。其中包括了全部虚拟文件。它们并不是保存在磁盘中,也不占用磁盘空间,当查看它们时,实际上看到的是内存里的信息,这些文件有助于我们了...

2018-03-30 15:31:05 116

原创 文件权限总结

理解文件权限 输出结果的第一个字段就是描述文件和目录权限的编码-代表文件  r代表可读   w代表可写   x代表可执行 默认文件权限 umask命令可以显示和设置默认权限 Linux文件权限码权限二进制值十进制值描述---0000无权限--x0011只执行-w-0102只有写权限-wx0113可写可执行r--1004只读r-x1015可读可执行rw-1106可读可写rwx1117读写执行权限  ...

2018-03-30 15:15:44 214

原创 哈希之开散列

对哈希表进行一些基本操作源文件#include"HashBucket.h"#include"Prime.h"int main(){ test(); return 0;}//初始化哈希桶void InitHashBucket(HT* ht, int capacity,PHF dataToInt){ int BucketNo = 0; capacity = GetPrim...

2018-03-16 16:14:51 146

原创 IO注释转换---CPP风格

头文件 convert.h#ifndef __CONVERT_H_#define __CONVERT_H_#define _CRT_SECURE_NO_WARNINGS 1#include #include #endif //__CONVERT_H_enum{ CSTATUS, CPPSTATUS, NULLSTATUS,EOFSTATUS };#define INPUT "i

2017-12-03 11:01:08 231

原创 通讯录--动态版本

实现动态版本的通讯录

2017-11-25 22:30:13 231

原创 实现通讯录

实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人

2017-11-24 09:09:42 295

原创 总结结构体枚举联合位段

结构体先简单的介绍一下结构体结构体是一种类型,是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。 1. 结构体类型的创建struct Stu{char name[4];int age;char sex;}a,*p;这里Stu是结构体名称,a是结构体变量,*p是指向结构体的指针。在创建结构体时,结构体名称不能省略,否则无法引用结构体

2017-11-24 09:08:30 310

原创 理解指针

高级指针(1)指针数组简单来说就是存放指针的一个数组,是数组例如  int*arr[10] (2)数组指针就是指向数组的一个指针,是指针,例如*p ,int(*p)[10] 写了一段简单代码int main(){int arr[10] = { 0 };int(*p)[10] = &arr;system("pause");return 0;

2017-11-16 22:54:47 204

原创 函数的调用过程--栈帧

函数的调用过程----栈桢先介绍一下基本概念EBP:基址寄存器(栈底)ESP:栈顶寄存器EIP:程序计数器(IP寄存器)call指令的两项功能(1)下一条指令地址压入栈中(2)跳转到目标函数的地址,开始执行新函数。执行过程如下:(1)开始执行(2)执行call指令调用myadd函数(

2017-11-05 10:21:26 230

原创 扫雷小程序

Game.h#include #include#include #define LINE 10#define LIST 10 void Init(char arr[LINE][LIST],int line, int list, char s);void print(char arr[LINE][LIST],int line, int list);

2017-10-21 17:21:38 464

原创 三子棋

设置了头文件Game.H #ifndef  GAME_H#define GAME_H#include #include#include #define ROWS 3#define LISTS 3 void game();void  pane(char arr[ROWS][LISTS],int rows, int lists);void

2017-10-20 13:42:22 288

原创 实现杨辉三角

#define _CRT_SECURE_NO_WARNINGS 1#includeint main(){int arr[7][7] = { 0 };int i = 0;int j = 0;for (i = 0; i {for (j = 0; j {if (j == 0 || j == i)arr[i][j] = 1;else{arr[i]

2017-10-14 20:51:21 200

空空如也

空空如也

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

TA关注的人

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