自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GIF-FFFFF

一、编译环境 VS2013二、项目功能可以将文件夹中的图片生成GIF动态图; 可以将指定的视频文件,修改其中的字幕,然后生成GIF动态图;三、项目总体流程通过DuiLib库在VS2013中生成一个可视化界面; 创建一个XML文件,通过修改XML文件对软件界面进行修改,并且添加相应的控件; 逐步完成各个控件的功能。四、具体实现过程1. 创建UI界面在VS20...

2019-08-21 09:03:49 549

原创 网络基础传输层

一、传输层功能:负责端与端之间的数据传输二、端口:用来标识一个进程,一个端口只能被一个进程占用,而一个进程可以占用多个端口。1. 0~1023:知名端口号,是留着备用的,一把都是用于协议,例如HTTP、FTP、SSH。2. 1024~65535:是操作系统动态分配的端口号,客户端程序的端口号,就是由操作糸统从这个范围来分配的,在TCP与UDP的套接字通信中,客户端的端口号就是在此范围...

2019-08-07 11:16:22 170

原创 网络基础应用层

应用层功能:负责应用程序之间的数据沟通。HTTP协议(超文本传输协议)1.序列化:将数据或对象按照协议转换成二进制数据持久化存储或者对数据传输进行组织。 反序列化:将二进制数据串按照协议进行解析转换成结构化的数据或者对象。2.URL(统一资源定位符,俗称网址)由上面可以看出URL中存在特殊字符,如:/ 、? 、#等,所以在查询字符串中(就是用户提交给服务端程序的数据),...

2019-08-05 16:15:06 232

原创 udp套接字编程

1.udp协议:用户数据报---无连接,传输不可靠,面向数据报。实现不可靠链接,传输不够灵活,但是不存在数据粘包问题。2.udp客户端与服务端通信流程3.代码实现//udp客户端#include "udpsocket.hpp"int main(int argc, char *argv[]){ if (argc != 3) { std::co...

2019-07-27 16:49:29 209

转载 三次握手与四次挥手

https://blog.youkuaiyun.com/yanxiaolx/article/details/52123628https://blog.youkuaiyun.com/zxygww/article/details/45009613

2019-07-27 16:33:53 157

原创 tcp套接字编程

1.tcp协议:传输控制协议---面向连接,传输可靠,面向字节流。实现数据可靠传输,传输灵活但是会造成数据粘包问题。2.tcp客户端与服务端通信流程3.代码实现//客户端 1 #include"tcpsocket.hpp" 2 #include<signal.h> 3 4 void sigcb(int signo) 5 { 6 ...

2019-07-27 16:33:39 262

原创 线程池以及线程安全的单例模式

一、线程池1.概念一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个 线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不 仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内 存、网络sockets等的数量。2.作用(1)避免大量线程频...

2019-07-24 17:28:32 415

原创 多线程部分代码

1.线程创建 1 #include<stdio.h> 2 #include<pthread.h> 3 #include<unistd.h> 4 5 void *func(void *arg) 6 { 7 while(1) 8 { 9 printf("I am odrinary thread...

2019-07-24 16:45:54 148

原创 c++初阶思维导图

https://github.com/Vellige/c-_emmx/blob/master/c%2B%2B%E5%88%9D%E9%98%B6.emmx

2019-07-17 20:05:25 162

原创 进程信号

1.信号介绍信号其实就是一个软件中断,通知进程发生的事件,打断当前操作,去处理该事件。信号有很多种类,每个信号都代表一个事件。2.信号的种类在linux下,我们可以使用kill -l 命令查看操作系统中的信号列表。其中一共有62种。其中1到31号为非可靠信号,34到64为可靠信号3.信号的产生(1)硬件产生:通过键盘输入的:ctrl+c、ctrl+z、ctrl+|(2)软件...

2019-05-27 17:20:18 117

原创 共享内存

一、原理:开辟一块物理内存,将这块物理内存映射连接到进程的虚拟地址空间进行操作,若多个进程映射连接同一块物理内存,则通过这块物理内存实现进程间通信,这种通信相较于其他进程间通信方式,少了两步用户态与内核态之间的数据拷贝过程。所以共享内存是最快的进程间通信方式。二、操作步骤1.创建共享内存实现函数:int shmget(key_t key, size_t size, int shmflg...

2019-05-24 23:05:02 1903

原创 管道

一、概念我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”,其本质时内核中的一块缓冲区。二、特性1.半双工通信。管道是双向选择,单向通信。2.读写特性。如果管道中没有数据,则read会阻塞;如果管道中数据满了,则write会阻塞;如果管道所有写端关闭,则read读完之返回0而不是阻塞;如果所有读端关闭,则write写完后触发异常退出而不是阻塞。3.管道自带同步...

2019-05-22 17:10:13 230

原创 动/静态库的生成和使用

1.存储文件流程从data_bitmap中获取空间数据块,写入文件数据,从inode_bitmap获取空间节点inode,写入文件详细信息以及数据块位置将文件目录项写入所在目录文件中。目录文件中存放的是一张表:其记录的时目录下的文件信息(文件名+inode节点号)2. 软链接/硬链接 软链接文件:创建:ln -s tmp.txt tmp.soft 文件类型是‘l’开...

2019-05-17 20:56:34 264

原创 对shell进行修改,使其支持输入/输出/追加重定向

在shell执行命令的时候,会打开三个文件,其对应的文件描述符为0,1,2。‘0’表示的是标准输入,‘1’表示的是标准输出,‘2’表示的是错误输出。所以我们平时在执行shell命令中,都默认是从键盘获得输入,并且将结果输出到控制台上。但是我们可以通过更改文件描述符默认的指向,从而实现输入输出的重定向。比如我们将1指向文件,那么标准的输出就会输出到文件中。输出重定向的命令为:命令 介绍...

2019-05-17 20:46:58 1232

原创 c标准库I/O接口和系统调用I/O接口

c标准库I/O接口fopen函数原型:FILE* fopen(const char* path,const char* mode)功能:打开文件,并返回指向该文件的指针参数:path:打开文件的路径及文件名mode:打开文件的方式,其可以有以下值r:只读方式打开,文件必须存在,若不存在则报错r+:可读写,必须存在,若不存在则报错w:只写,文件存在则文件长度清0,文...

2019-05-16 20:52:46 345

原创 linux下自主实现minishell

实现minishell的主要步骤如下:1.获取标准输入中的字符串;2.解析输入得到的命令名称和运行参数;3.创建子进程,在子进程中进行程序替换4.进程等待下面是实现代码 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 #include<f...

2019-05-10 20:16:52 491

原创 环境变量相关的函数和命令

环境变量:一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。一、常见的环境变量 PATH:指定命令的搜索路径。 HOME:指定用户的祝工作目录。 SHELL:当前Shell,它的值通常是/bin/b...

2019-05-02 22:10:11 263

原创 linux下僵尸进程与孤儿进程

僵尸进程:僵尸进程的造成是因为子进程先于父进程退出,而操作系统需要保留了子进程的退出信息,因为有可能父进程需要查看这些退出信息,但是目前父进程没有查看,导致子进程退出了,但是子进程的资源并没有完全被释放掉,而处于僵死状态,这样的子进程也就成为了僵尸进程。僵尸进程会造成资源的浪费,所以我们需要避免僵尸进程的产生,所以需要在父进程调用wait()或者waitpid()函数来释放掉子进程的退出信息。...

2019-05-02 19:36:40 315

转载 Linux下软件安装的几种方式(源码安装, rpm安装, yum安装)

https://blog.youkuaiyun.com/ningningmingming/article/details/79760646

2019-05-02 15:21:07 193

原创 在Linux下实现进度条程序. 通过makefile进行编译. 建议自主完成一个彩色的进度条

首先创建一个makefile文件,其文件内容为 1 test:test.c 2 gcc $^ -o $@$^:表示所有依赖对象; $@:表示目标对象。(补充$<表示第一个依赖对象)然后创建test.c文件,文件内容为 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include...

2019-05-02 13:44:48 182

原创 链表与顺序表的区别

1.存储的方式。顺序表使用的是一块连续的地址来存储数据,所以相邻数据的地址也是相邻的。而链表不需要使用连续的地址,这也是链表的一个优点,可以充分利用碎片空间。2.空间分配。顺序表由于是静态分配内存空间,所以是在栈区吗,可以自动释放,而链表是动态内存分配,位于堆区,需要手动释放。3.扩容。顺序表的空间是有限制的,不可以增加长度,而链表的空间由于是动态内存分配的是可以随意更变的。4.插入和...

2019-05-01 15:30:35 2205

原创 了解以下重要命令. du, df, top, free, pstack, su, sudo(sudo -, sudo -s), adduser, password

要了解这些命令的作用,可以使用man命令在手册中查看。du 【选项】 文件名:包好指定的文件使用的数据块的总量,在没有给定参数的情况下,报告的是当前目录所使用的磁盘空间。-a显示所有文件对系统数据块的使用情况-b显示数据块大小时以字节为基本单位-c除了显示文件对系统数据块的使用情况外还显示出文件的总和-...

2019-04-26 20:50:04 161

转载 查找资料, 了解以下Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp

/proc:Linux内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。/sys:文件系统访问Linux内核。/SElinux:SELinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由...

2019-04-26 20:32:25 102

原创 进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限

对于目录文件,我们想了解其权限,可是使用命令“ls -l”,然后我们就能看到每个文件的前面的第一个就是该文件的权限说明,例如一个文件的前面显示的是“drwxr-xr-x”,首先‘d’表示文件类型是目录文件,‘rwx’表示文件的所有者权限是可读可写可执行,第一个‘r-x’表示文件所属用户组权限是可读可执行,第二个‘r-x’表示的是其他用户的权限也是可读可执行。所以可以看到文件操作对用户的分类分为:所...

2019-04-26 15:28:50 204

原创 堆的实现

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结 构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统 虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。堆的概念及结构如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树...

2019-04-21 19:51:28 119

原创 常见排序算法的学习与实现(插入、希尔、选择、堆排、冒泡、快速、归并)

一、直接插入排序直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与 array[i-1],array[i-2],…的排序码顺序...

2019-04-21 16:55:13 226

原创 栈和队列

1.栈的概念和结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。2.栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。下面是栈的实现代码#pragma o...

2019-04-21 09:24:05 198

原创 二叉树的学习以及c语言实现二叉树相关函数

1.树的概念及结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多 个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结 点可以分为多个不相交的子树。2.二叉树的概念及结构二叉树是节点的有限集...

2019-04-20 22:48:41 405

原创 c语言实现双向循环链表以及部分函数功能

双向链表的结点里包含一个指向上一个元素的pre指针,一个指向下一个元素的next指针,而要实现循环只需要将头节点的pre指向最后一个节点,而最后后一个节点的next指向头节点。下面是代码实现部分。首先时头文件部分#pragma once#include <stdlib.h>#include <stdio.h>#include <assert.h&g...

2019-04-15 14:01:19 449 3

原创 链表的学习以及不带头节点的单链表的实现

1. 什么是链表?链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,也就是说当我们知道一个元素的指针,我们可以通过它去寻找到下一个元素的位置,以此类推。相比较于前面所学的顺序表,在某些方面链表更为高效。比如:由于链表在物理存储上非连续,所以可以更有效的利用内存的碎片空间,并且链表的的某些操作,时间复杂度也相对更少。下面是用c语言来实现不带...

2019-04-11 14:34:02 169

原创 顺序表的理解与实现

1. 顺序表的概念。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数据存储,在数组上完成增删查改。2. 顺序表的分类;静态顺序表和动态顺序表的区别。顺序表一般可以分为静态顺序表和动态顺序表。静态顺序表显然就是里面的内存是一定的,不能改变的,而动态顺序表则是动态分配内存空间,在现实中我们也更加常用动态顺序表。。3.顺序表的优缺点。优点:...

2019-04-10 17:14:33 373

原创 c语言实现strstr、strchr、strcmp、memcpy、memmove

1.实现strstr函数。strstr函数的功能是在字符串1中寻找是否含有字符串2,也就是查看字符串2是否位字符串1的字串。实现方法相对简单,可以先遍历字符串1,找到与字符串2的首位置相同的字符,然后在从该处开始依次比较接下来的字符是否相等,直到字符串2结束为止。因此在这里可以用到一个二重循环,第一重循环遍历字符串1,第二重循环从两个字符串有相同字符开始,如果二重循环结束,并且字符串2都被比较...

2019-04-05 22:21:18 184

原创 c语言实现strcat

strcat的功能是实现字符串的拼接,由于传的是指针,所以在实现过程中首先让第一个自加到它的最后一个字符,然后再让它继续自加,让它和第二个字符指针指向的字符相同,同时第二个字符串也自加,最后直到第二个字符串里的字符都拼接完,这时候由于第一个字符指针指向的字符串没有了‘\0’,所以让第一个字符指针指向‘\0’。#define _CRT_SECURE_NO_WARNINGS#include...

2019-04-02 15:48:25 1204

原创 c语言实现实现strcpy

首先是一种比较容易想到的实现方法,传参方面就不多说了,一个是被copy的字符数组,一个是目标数组。实现方法很简单,首先定义一个指针指向目标字符串数组用来返回结果,然后利用Strlen函数计算需拷贝的字符串的长度,然后利用一个for循环,从字符串的第一个字符到最后一个字符开始复制,最后将指向目标数组的指针返回。下面是实现代码#define _CRT_SECURE_NO_WARNINGS...

2019-04-02 15:22:50 1484

原创 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。 编程实现

喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。这个问题,咋一看只需要将钱数money不停除2,将结果相加,但当money%2 == 1时,也就是money为奇数时,这是就会多出一个空瓶子。因此需要改变一下,当money数为奇数时,让money = money/2 - 1.下面是代码程序。#define _CRT_SECURE_NO_WARNING...

2019-03-27 18:55:37 263

原创 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。

一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字,编程实现。这个问题的解决办法其实很简单,只需要将数组的元素按照顺序依次两两异或,最后得到的结果便是那个只出现一次的数。下面是实现代码#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int se...

2019-03-27 16:34:27 338

原创 c语言编写扫雷游戏

扫雷游戏首先我们可以想到的是用一个二维数组来表示玩家所看到的地图,但是我们实际需要两张地图,一张是玩家看到的地图,一张则是地雷的分布图。对于地雷的分布图,我们可以使用char类型的二维数组,其中‘1’表示地雷,‘0’表示不是地雷;而对于玩家看到的地图,我们可以初始化全为‘ ’,所以也用char类型的二维数组。而且在游戏开始时,我们用‘ ’ 表示未翻开的地方,而数字表示已经翻开的地方。接下来我们...

2019-02-15 10:59:23 288

原创 c语言编写简单的三子棋

利用c语言编写三子棋的代码,相对来说比较简单,三子棋其实就可以看作是以个三行三列的二维数组,然后对其里面的每个元素进行赋值。因此我们首先需要理清楚三子棋完成的思路。1.首先我们需要一个棋盘,所以需要一个print()函数来打印棋盘。而棋盘内容需要什么呢,很显然是棋子。我们选择‘x’为玩家落子,‘o’为电脑落子。2.然后就是落子的过程了。我们玩家落子的时候,以输入坐标的方式来进行,我们用pl...

2019-01-07 16:26:43 266

原创 c语言中递归的学习

在学习c语言函数部分时,有一个非常重要的知识就是递归了。首先递归就是程序调用自身的编程技巧,递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量的程序就可以描述出接替过程所需要的多次重复计算,大大地减少了程序的代码量。而在使用递归时必须要有两个...

2018-12-26 12:28:01 468

原创 git的安装和github的注册

对于git的安装和github的注册并没有什么困难,git的话首先要先安装好tortoise git,安装好之后在去下载git for windows就可以了。而github的注册也就和注册一些软件的账号一样,填写好邮箱,用户名就可以注册成功了,并没有什么困难。...

2018-12-25 08:56:00 121

空空如也

空空如也

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

TA关注的人

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