自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Json在工作中的使用总结

Jsoncpp的使用

2019-06-28 01:35:21 215

原创 关于动态库的的编写与使用过程

动态库相关在实习期间做的事情是对组内项目编译的辅助工具编写,期间涉及到很多关于动态库相关的一些内容,现在将动态库相关的一些知识来整理和重新学习一下,目前只考虑Linux环境什么是动态库说动态库之前要来看一下什么是"库",库是一系列可复用,成熟的,已经写好的代码,动态库是使用非常多的一种技术,动态库在程序运行的时候被载入(静态库是编译时),不同的程序调用相同的库的时候,内存中只存在一方该sha...

2019-05-12 15:02:08 669

原创 重温Linux中的共享内存通信方式

一直在为找大三的实习做准备,很长一段时间都没有更新我的CSDN了,期间主要就是画思维导图来实现构建知识体系,思维导图的链接:https://gitee.com/lemaliu/my_computer_knowledge_system,现在终于有时间安心静下来好好沉淀沉淀了。经过这段时间的面试,发现共享内存被问的频率虽然不高,但一直对它没有一个深刻的理解,认为就是Linux下进程间通信的一种方式...

2019-04-06 11:00:48 508

原创 二叉树基本操作

#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <assert.h>#include <stdbool.h>#define MAX(x,y) ((x)>(y)?(x):(y))typedef int DataType;typedef...

2018-10-27 20:07:26 182

原创 TCP连接管理、可靠传输机制、提升传输性能机制

TCP协议格式TCP全称为“传输控制协议”,是传输层一种重要的协议TCP协议段格式十六位源端口号、十六位目的端口号、三十二位序号、三十二位确认序号、四位首部长度、保留六位、十六位窗口指针大小、十六位校验和、十六位紧急指针、数据。源端口号/目的端口号,记录了数据的传递方向以及目标4位TCP报头长度:表示该条数据有多少个4字节,所以TCP最大长度为15*4=6032为序列号和3...

2018-10-21 21:37:04 402

原创 探究C++多态实现原理

探究C++多态实现原理在之前的博客中讲到了如何使用C++多态的性质,实现面对对象的程序设计。在这一篇文章中将会从多态的实现原理,_vfptr 以及多态类的内存构建模型上来探究C++多态的实现过程。从以下代码来讨论:#include <iostream>using namespace std;typedef void(*VIRTUALL)();class Person...

2018-09-24 15:37:55 220

原创 TCP多主机聊天程序

一台服务器的一个服务端为多台主机的客户端提供TCP服务项目。多进程实现多进程服务端代码 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #include <sys/types.h> 5 #inc...

2018-09-23 19:15:19 164

原创 浅谈C++多态

面向对象的程序设计都有封装,继承和多态三大特性,前两个特性在之前的博客中已经提到,这篇主要讲关于C++多态问题。何为多态?简单的说,就是一句话:允许将子类类型的指针(引用)赋值给父类类型的指针(引用)。举个例子,当我们在定义两个类,一个Person类作为父类,在乘坐高铁时购买二等座,Boss是Person的派生类,乘车购买一等座,而且他们的购票成员函数名字相同,如以下代码:cla...

2018-09-21 21:24:38 158

原创 菱形继承问题以及虚拟继承探究

在前边的博客中我提到过菱形继承的问题,也给出了几种解决菱形继承的方法https://blog.csdn.net/liu_zhen_kai/article/details/81590467但是给的方法没有说明原因,这篇博客将会从内存存储模型角度,以及虚继承为什么可以使解决菱形继承的问题进行阐述与证明。 所谓菱形继承就是指类B,类C同时继承A,且D同时继承B,C,在A具有成员函数的情况下,...

2018-09-21 20:33:38 161

原创 斐波那契时间复杂度和空间复杂度分析

时间复杂度时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。 计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时...

2018-09-16 21:06:08 23366 5

原创 进程信号

进程信号的产生方式:硬件中断当用户按下某些按键时,想进程发送的信号ctrl + c / ctrl + | 等硬件异常访问非法地址空间,cpu运算出错等kill 命令kill -n pid软件条件产生kill函数raise函数alarm函数sigqueue函数 后文会一一讲到查看所有的信号 kill -l 命令[...

2018-09-02 20:19:37 147

原创 进程间通信之FIFO有名管道

无名管道的概念 无名管道是临时的,在完成通信后自动消失,因为文件描述符只在某个进程中可见,所以无名管道只能用于具有亲缘关系的进程之间的通信。 有名管道FIFO是一种特殊的文件机制,依赖于文件系统,可以实现任意进程之间的通信。用shell创建有名管道[liu@bogon 07]$ cat pipe.c > fifo 发生阻塞等待启动另一终端:[liu@bogon 07...

2018-08-27 11:43:48 265

原创 System V 进程通信之共享内存

共享内存IPC原理 共享内存是在内存中单独开辟的一段内存空间,这段内存空间有自己的数据结构,包括访问权限,空间大小和最近一次的访问时间等等,数据结构定义如下:49 /* Data structure describing a shared memory segment. */ 50 struct shmid_ds 51 { 52 struct ipc_perm sh...

2018-08-26 13:29:02 206

原创 System V 进程间通信之消息队列

消息队列的基本模型 消息队列中有两个数据结构msqid_ds消息队列数据结构:描述着整个消息队列的属性包括:消息队列的权限,消息队列的拥有者,指向消息队列第一个以及最后一个成员的指针msg消息队列的主体数据结构包括:消息类型,消息大小,消息位置以及下一消息。 60 #define MSG_MEM_SCALE 32 61 62 #define MSGMNI 16 ...

2018-08-25 19:52:24 171

原创 进程间通信之PIPE无名管道,文件重定向以及综合操作

在之前的进程控制中,常会用到 | 将两个命令连起来来进行对显示信息的筛选,从而改变标准的标准输出方式。[liu@localhost ~]$ ps -ef | grep 'ssh'root 2329 1 0 04:20 ? 00:00:00 /usr/sbin/sshdroot 3378 2329 0 04:28 ? 00:00:...

2018-08-24 20:53:27 558

原创 POSIX 文件及目录管理1

POSIX 文件及目录管理1.文件流与文件描述符的区别 在C库中,实现了对系统IO接口的封装,使得用户更加方便使用,但是不管如何实现,最终都要通过内核实现对文件的读写控制。下面举个例子来看一下C库与系统中对于标准输入,标准输出与标准错误的头文件定义//C库[liu@localhost /]$ cat /usr/include/stdio.h | grep '_IO_FILE*...

2018-08-24 15:02:49 1017

原创 模拟实现Shell

模拟实现shell实现shell,需要做到以下四点:接收带空格的字符串解析字符串,实现做到遇到空格则发生截断,再将其放入子进程的参数列表创建一个子进程进行进程替换,实现用户的功能父进程等待子进程结束,退出程序 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h&...

2018-08-21 21:36:24 1545

原创 进程控制3(进程替换)

进程替换在fork之后,产生的子进程会拥有和父进程相同的代码段和数据段,执行父进程相同的公共代码,但是多数情况下我们不会让子进程做与父进程相同的工作,这样就会用到进程替换的概念。 进程替换可以使用exec函数族来完成替换工作 exec族函数在man手册的资料: int execl(const char *path, const char *arg, ...): ...

2018-08-21 19:39:36 141

原创 进程控制2(进程等待,status参数分析,阻塞非阻塞等待状态分析)

进程等待进程等待的必要性 当子进程退出而父进程继续工作不回收子进程资源,那么就会产生僵尸进程。僵尸进程危害很大,kill -9 也无法杀死僵尸进程当子进程完成工作后父进程需要直到子进程是否完成,是否异常父进程需要等待子进程的退出信息来回收子进程的所有资源,避免资源泄露 进程等待方法 调用系统调用接口waitpid_t wait(int *status);参数s...

2018-08-19 19:56:03 11995

原创 进程控制1(进程创建,进程终止)

进程创建fork()与vfork()fork()//man手册pid_t fork(void);fork() creates a new process by duplicating the calling process. The new process, referred to as the child, is an exact duplicate o...

2018-08-19 17:56:21 617

原创 进程地址空间

进程的地址空间背景 Linux32位操作系统内核版本:Linux version 2.6.32-754.3.5.el6.i686 Linux可执行程序文件空间布局 查看文件结构命令 size + 可执行文件名 size - list section sizes and total size. The GNU size utility lists the se...

2018-08-19 15:33:14 4099

原创 进程2

孤儿进程孤儿进程在Linux操作系统中不包含,指的是父进程在子进程退出之前先行退出的一种特殊状态,产生孤儿进程之后,孤儿进程被0号进程init所领养例子 :1 #include <unistd.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main(void) 6...

2018-08-19 13:18:16 124

原创 进程

进程和程序 进程时程序的实体化,程序被储存在磁盘当中,当程序被加载到内存当中(执行起来),操作系统利用PCB将进程描述起来,Linux下PCB是:task_struct task_struct是一种数据结构,用来描述进程,包含进程的各种信息,包括进程号PID 状态 优先级等等很多信息 9 task_struct包含的信息: 10 标识符 : pid 11 状态 : 就绪,...

2018-08-17 18:19:31 443

原创 Linux常见基础命令1

Linux常见基础命令1ls 用法: ls [选项] [文件名] 功能: 对于目录可以列出目录下的所有文件,对于文件列出文件名及其详细信息。 常用选项详解:ls -a : -a, --all do not ignore entries starting with .**列出所有文件,包括隐藏文件****例子**[liu@localhost 进...

2018-08-15 17:23:48 126

原创 C++菱形继承,二义性问题以及解决方法

C++菱形继承,二义性问题1.菱形继承(路径二义性问题)在实现继承的过程中,若派生类B,C同时继承基类A,派生类D同时继承类B,C这样对于基类A中的成员相当于在D被继承过两次,A,B,C,D整体关系构建成为一个菱形框图,这样就是C++中的菱形继承问题代码实现#include <iostream>using namespace std;class A{publ...

2018-08-12 11:07:43 3348

原创 C++继承派生类

C++中继承与派生类在C++实现面向对象的编程时,在创建新的类时,可以使用已有的存在的类进行派生,或者称之为对于基础类的继承在C++写代码的过程中,定义被继承的类为 基类,为继承基类的新类叫做 派生类 在实现派生类的时候对于基类有三种继承方式 : public(公有继承),private(私有继承),protected(保护继承) 它们之间的实现关系如下图 : 继承语...

2018-08-11 19:27:49 459

原创 在静态成员函数中访问非静态成员变量

在静态成员函数中访问非静态成员变量在正常情况下一个static修饰的静态成员函数是无法对非静态成员变量进行访问与操作的 : #include <iostream>using namespace std;class Date{public : Date(int y = 1998, int m = 2, int d = 15) :year(...

2018-07-29 19:18:05 13199 1

原创 C++中类中的静态变量成员与静态成员函数

C++中类中的静态变量成员与静态成员函数声明为static的类成员(成员数据或成员函数)称为类的静态成员特性 : 静态成员为所有的类对象所共享,不属于某个具体的事例 静态成员即可用类名::静态成员或者对象.静态成员所访问 静态成员变量必须在类外所定义,定义时不能添加static关键字 静态成员函数没有默认的this指针,因为它里面不能使用任何非静态成员 静态成员和普通的类成员...

2018-07-29 16:06:16 3807

原创 运算符重载总结

运算符重载1.重载的概念C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载...

2018-07-29 14:04:46 418

原创 类和对象的六个默认成员函数之拷贝构造与析构函数

类和对象的六个默认成员函数之拷贝构造与析构函数拷贝构造函数1.概念 :只有单个形参,而且该形参是对本类类类型的引用(常用const修饰),这样的构造函数称为拷贝构造函数。拷贝构造函数是特殊的构造函数,创建对象时用已经存在的同类型对象进行初始化,由编译器自动调用 举例:#include <iostream>using namespace std;class ...

2018-07-29 11:37:56 278

原创 类和对象的六个默认成员函数之this指针与构造函数

类和对象的六个默认成员函数this指针:在C++中的成员函数也是按照C类似的方式处理的,即:成员函数实际上也有一个指针时隐藏的,指向了调用函数的对象本身,这个指针就是this指针this指针特性: this指针的类型:类类型* constthis指针并不是对象本身的一部分,不影响sizeof的结果 this指针的作用于在成员函数的内部 this指针时类成员哈数的第一个默认隐...

2018-07-28 16:02:06 255

原创 对于指针总结与高级应用

C语言中对于高级指针话题的总结在C语言中对于指针最开始接触得到的话题就是在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。一开始接触到的指针几乎都是直接指向一个比较简单的变量 , 例如对于一段c代码:#include <std...

2018-06-04 21:33:52 732

原创 通讯录(动态)

//////////////////////////////// .h文件 /////////////////////////////#pragma once #include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#include <assert.h>//实现一个通讯录;//通讯录可以用来

2018-05-01 23:42:38 135

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

函数的调用过程(栈帧)每一次函数调用都是一个过程称之为函数的调用,这个过程需要开辟栈空间,用于本次函数的调用中临时变量的保存与保护,这块栈空间我们称之为函数栈帧 1.从main函数开始,就要为main函数创建栈帧,先来看main函数栈帧的创建 add函数的调用参数传递过程: ...

2018-05-01 19:50:04 366

原创 C语言扫雷

实现用C语言编写一个扫雷游戏大家想必都玩过扫雷,无论那个版本都有难度供已选择,下面来分享一个自己用C语言编写的扫雷游戏吧!编写语言:C语言编写软件:visual studio 20171.首先是将游戏的测试模块写好,要有提示玩家进入的菜单函数以及选择函数等各种需要编写的函数想出一个整体框架来//测试模块test。c #include "game.h"voi...

2018-03-09 21:36:25 340

原创 Linux环境下MySQL的入门教程

Linux环境下数据库的学习总结(一)该篇讲 mysql 的基本使用启动MySQL在Linux内安装好MySQL后,使用根用户才能进行操作//进入根用户操作命令[centos6@bogon ~]$su //输入suPassword: // 输入密码[root@bogon centos6]# service mysqld start //服务器启动指令Starti...

2018-03-02 10:39:14 456

原创 三子棋

头文件#ifndef __game_h__#define __game_h__#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>extern void Get_board(char a[][3],int LINE,int LIST);extern void Player_operation

2018-01-01 21:55:17 223

原创 C语言数组总结

markdown

2018-01-01 21:15:24 906

原创 C语言操作符的学习总结

1 ,算数操作符 :+ - * / %   注意 : 除法:只能进行整数操作,                 模:只能对整数进行(两个数都为整数)     2, 位移操作符      a = 10 ; b = 20 ;     >> 右移  exp: int a = 10 ; b =  a>>1;  => a = 10;  b = 5 ;           (

2017-12-20 10:26:01 182

原创 猜数字游戏+倒计时器+计时器

猜数字游戏#include#include#includevoid menu(){ printf("***********************\n"); printf("******开始1,退出0*****\n"); printf("***********************\n");}//菜单函数int game(int num){

2017-12-16 19:58:13 1876

空空如也

空空如也

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

TA关注的人

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