自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 段错误以及调试方法

一.段错误产生的原因段错误就是访问了不可访问的内存,出现了运行时出现了segmentation fault的报错产生的原因:访问不存在的内存地址、访问系统保护的内存地址 、访问只读的内存地址、空指针废弃(eg:malloc与free释放后,继续使用)、堆栈溢出、内存越界(数组越界,变量类型不一致等)二. 使用GDB逐步查找段错误首先加上命令行得先加上-g -rdynamic的参数进行编译,eg:gcc -g rdynamic xxx.c 随着gdb ./a.outeg:三. 分析core

2021-08-12 19:40:40 11278

原创 C 内存管理

一.内存中的数据位置未初始化的全局变量(.bss段)(1)bss段用来存放那些没有初始化和初始化为0的全局变量(2)特点:bss类型的全局变量只占运行时的内存空间,而不占用文件空间(3)现代大多数操作系统,在加载程序时,会把所有的bss全局变量清0(4)作为全局变量,在整个程序的运行周期内,bss数据是一直存在的(5)为保证程序的可移植性,手工把这些变量初始化为0也是一个好习惯,这样这些变量都有个确定的初始值初始化过的全局变量(.data)(1)data段用来存放那些初始化为非零的全

2021-08-10 19:51:03 247

原创 Make,Makefile到Cmake的用法简述

一.Make什么是Make?由于在实际的开发过程中,如果只使用gcc命令对程序进行编译的话,效率是非常低的。因为开发的程序往往是有多个原文件组成的,文件非常庞大。为了提高编译程序的效率,所以提出了make的概念,make是gcc提供的半自动化工程管理器。用户只需要在终端输入或者单击一个"make",就可以启动工程管理器对整个程序进行自动编译。make的优越性具体体现在两个方面:使用方便,调试效率高(1)使用方便。通过命令make就可以进行自动编译了。make启动后会根据Makefile文件中的编

2021-08-06 19:59:13 1078

原创 wireshark抓包原理

一:网络原理(情况)本机环境:直接抓包本机网卡进出流量集线器环境:流量防洪,同一突破交换机环境:a.端口镜像,通过交换器的其他接口流量COPY一份;b.ARP欺骗(arp特性后到优先,错误绑定地址);c.MAC泛洪,在没有权限,不能使用端口镜像时,泛洪垃圾包产生大量MAC地址去冲击MAC地址表,使其改变,把其他的MAC地址挤出MAC表,按交换机的处理原理,收到的数据报如果是未知真的话,就会对外泛洪二:底层原理(底层架构)结构从下到上 1-5GTK1/2:图像处理工具,处理用户的输入输

2021-08-04 17:41:40 2795

原创 FTP:文本传输协议

一.作用与功能作用:用于文件的上传和下载功能:(1)连接到FTP服务并操纵数据和数据的上传下载以及备份,其FTP服务器就是支持FTP协议的服务器;(2)可以访问物理远程服务器。二.报文格式FTP指令(1)连接成功:220 Welcome to XFtpServer(libevent)\r\n(2)USER用户登录:a.USER root\r\n b. 230 Login successful.\r\n(3)PWD获取当前目录:a. PWD\r\n b. 257

2021-08-03 19:55:45 907

原创 HTTP:超文本传输协议

一.基本概念什么是HTTP协议?超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器,通过因特网传送万维网文档的数据传送协议。作用:服务器传输超文本到本地浏览器的传送协议。最初是用来向客户端传输HTML页面的内容。默认端口是80;在浏览器(网页)与服务器之间传送文档或者图像等等。二. 报文格式...

2021-08-03 19:03:12 2163

原创 ICMP:Internet控制报文协议

一.作用与功能作用:ICMP一种面向无连接的协议,用于传输出错报告控制信息。主要用来检测网络通信故障和实现链路追踪。其功能主要有:(1)确认IP包是否成功到达目标地址 (2)通知在发送过程中IP包被丢弃的原因二.报文类型ICMP报文是在IP数据报内部被传输的ICMP的报文格式报文类型:不同类型又报文中的类型字段和代码字段来共同决定(因为对ICMP差错报文有时需要作特殊处理)eg:在对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文报文始终包含IP的首部和产生

2021-08-03 13:30:12 548

原创 DHCP:动态主机配置协议

一.作用与功能作用:集中的管理,分配IP地址,使client动态的获得IP地址,Gateway地址,DNS服务器地址等信息。功能:(1) 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用(2)DHCP应当可以给用户分配永久固定的IP地址(3)DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)(4) DHCP服务器应当向现有的BOOTP客户端提供服务二.DHCP报文格式DHCP报文DHCP协议包组成成分:(1)htype:DHCP客户端的MA

2021-08-03 10:58:04 243

原创 ARP 地址解析协议与RARP 逆地址解析协议

一.作用与功能地址解析:为32bit的IP地址和数据链路层使用的任何类型的地址(48bit)这两种不同的地址形式提供映射。[32 <–> 48]ARP作用:为IP地址到对应的硬件地址之间提供动态映射。动态是表示这个过程是自动完成的,一般应用程序用户或者系统管理员不必关心。ARP功能:最终是获取到MAC信息,服务于链路层。RARP作用:允许局域网的物理机器从 网关 服务器的 ARP 表或者缓存上请求其 IP 地址。 网络管理员 在局域网 网关 路由器 里创建一个表以映射 物理地址 (

2021-08-02 19:43:33 451

原创 DNS:域名解析协议

一.DNS域名系统作用:将域名转换为IP地址(也可以将IP地址转化为响应的域名地址)DNS的功能:方便用户使用question:TCP/IP中使用的是IP地址和端口号来确定网络上的某一台主机上的某一个程序,那为什么不用域名来直接通信呢?Answer:IP地址是面向主机的,而域名则是面向用户的(1)因为IP地址是固定长度,IPV4是32位,IPv6是128位,而域名是变长的,不便于计算机处理(2)IP地址对于用户来说不方便记忆,而域名便于用户使用二.DNS报文格式1.DNS查询和响应的

2021-08-02 17:18:06 649

原创 IP:网际协议

一.作用与功能IP的作用:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。IP仅仅提供最好的传输服务,但(不可靠)并不能保证IP数据报能成功地到达目的地(任何要求的可靠性都必须由上层来提供,eg: TCP),并(无连接)IP不维护任何关于后续数据报的状态信息,且每个数据包的处理都是相互独立的。IP地址的作用:当设备连接网络,设备将被分配一

2021-08-02 15:06:33 322

原创 【详解】VScode(Visual Studio Code)在Liunx下的安装与配置

一.什么是VScode?Visual Studio Code(简称“VS Code” )是 Microsoft 在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、 Windows 和 Linux 之上的,针对于编写现代Web和 云应用 的跨平台源代码编辑器, 可在桌面上运行,并且可用于Windows,macOS和Linux。它的特点就在与:免费开源,支持语法高亮,智能代码补全,自定义热键,括号匹配,代码片段以及跨平台!二.安装废话不多说,直接上步骤加图。1. 下载地

2021-08-02 11:33:26 37762 5

原创 python的循环语句if for while 的运用

一.if语句1.if …else …C典型代码int number = 66;if number > 60; printf("yes");else printf("no");python可以像C语言一样,也可以更加简便number = 80print(type(number))if number > 70: print('yes')else : print('no')#写在一行 score = 61print('yes') if sco

2020-05-16 19:56:06 319

原创 python字符串序列类型字典的基础运用

一.字符串的应用1.查找字符串里的单个字符其中的字符串,可以理解为一个数组,从开始的第一个字符可以视为数组的第一个元素。这样就可以使用s[i]来表示串中的字符位置(从0到i依次查找),应为python是从左到右的顺序识别的,而s[-1]的话,就反过来,找最后一个字符。同意s[-2]是右边的第2个字符。s1 = 'This is string's2 = "This is a dog"pri...

2020-04-30 16:24:38 345

原创 Python开始的运行基础

一.Python的使用环境(Anaconda)在 Anaconda Prompt 窗口 中通过命令进行 Python 环境的管理。创建一个python环境:conda create -n python_learning python = 3.7 (这里python_learning是创建的环境名字,3.7则是版本)环境创建完成后,可以继续用命令查看当前已经存在的python环境conda...

2020-04-26 22:07:36 208

原创 C语言:编写函数实现将一个整数转为任意进制的字符串输出

```c#include<stdio.h>#include<string.h>void change(char *s, int num, int n){ int i = 0; char temp; while(num != 0) { s[i] = num % n; if(s[i] <= 9) { s[i] = s[i] + '0...

2019-09-30 22:43:02 1172

原创 C语言字符串:寻找合法帧

输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来eg: 帧头和帧尾分别是head和tail 字符串 “asdasheadsfsafsafsfastail”中headsfsafsafsfastail是合法帧#include<stdio.h>#include<stdlib.h>#include<string.h>/*函...

2019-09-26 22:02:41 322

原创 C语言:字符串空格单词形式的反转

eg : 输入 Are you pig? 输出 pig? you Are#include<stdio.h>#include<string.h>void Reverse(char *s){ int i, length = strlen(s); char *end = s + length - 1; char ch; for(i = 0; i < l...

2019-09-22 22:23:33 403

原创 C语言:字符串的逆序

#include<stdio.h>#include<string.h>#include<stdlib.h>void Reverse(char *s) //指针方式{ int i; int length = strlen(s); char *end = s + length - 1; char ch; for(i = 0; i <...

2019-09-22 22:01:14 431

原创 C语言练习题:寻找字符串中的子串的存在的次数

#include<stdio.h>#include<stdlib.h>#include<string.h>void Count (char *str, char *s) //指针方式{ int i, count = 0; int length1 = strlen(str), length2 = strlen(s); for(i = 0; i ...

2019-09-22 21:44:50 352

原创 Sqlite3数据库基本运用

sqlite3– 创建表create table student (id integer, name text, sex text);create table if not exists student (id integer, name text, sex text);– 查看表.tables– 查看表结构.schema student– 插入数据insert into stu...

2019-08-28 14:16:22 172

原创 Liunx系统编程(五)网络编程

协议栈:Linux的优点之一就是在于它丰富而稳定的网络协议栈,其范围是从协议无关层(如通用的socket层接口和设备层)到各种网络协议的实现。对于网络理论介绍一般采用OSI模型,但是Linux中网络栈的介绍一般分为四层的Internet模型网络模型为:TCP/IP协议族系结构数据链路层:数据链路层实现了网卡接口的网络驱动程序,以处理数据在网络媒介上(比如以太网)上的传输。不同的物理...

2019-08-27 14:00:04 167

原创 Linux系统编程(四)Linux多线程编程

进程和线程的区别进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。进程:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元;进程是程序执行时的一个实例,即它是程序已经执行到某种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。Linux系统是一个多进程的系统,它的进程之间具有并...

2019-08-19 20:41:20 303

原创 Linux系统编程(三)进程间通信

进程间通信概述1.数据传输一个进程需要将它的数据发送给另一个进程2.资源共享多个进程之间共享同样的资源3.通知事件一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件4.进程控制有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变现在Linux使用的进程间通信方式包括:1、管道(pipe)和...

2019-08-18 10:51:23 334

原创 Linux系统编程(二)进程控制编程

进程的定义:进程是一个具有一定独立功能的程序的一次运行活动,同时也是资源分配的最小单元程序是指放到磁盘的可执行文件进程是指程序执行的实例 (./xxx)进程与程序的区分:进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件、静态和可以复制进程是暂时的,程序使长久的:进程是一个状态变化的过程,程序可长久保存进程与程序组成不...

2019-08-17 20:20:24 259

原创 数据结构(十一)8种排序

1.直接插入排序#include<stdio.h>void InsertSort(int *a, int length){ int i, j, tmp; for(i = 1; i < length; i++) { tmp = a[i]; for(j = i - 1; j >= 0; j--) { if(a[j] > tmp) { ...

2019-08-14 21:19:20 211

原创 linux系统编程(一)文件编程

简介:Linux一点哲学,“一切皆为文件”;在Linux中对目录和设备的操作都等同于对文件的操作,都是使用文件描述符来进行的。Linux文件可分为:普通文件,目录文件,链接文件,设备文件;Linux系统调用及用户编程接口(API) :所谓系统调用是指操作系统提供给用户的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的的服务由于在Linux中,为了更好地保护内核空...

2019-08-14 14:19:07 363

原创 数据结构(十)线性表的结构体定义归纳总结

1.顺序表struct SequenceList{int *data; //定义一个指针,指向数据。int length;};除了查找元素,位置,查看长度。其他初始化,插入,删除,清空,销毁都要取地址(修改实参的值)在main主函数里,定义的是一个变量 seq list;2.链表(单链表)Struct Node{ElemType data; (typedef i...

2019-08-11 16:58:39 841

原创 数据结构(九)二叉树

树的概念:树树(Tree)是n(n>=0)个结点的有限集。n=0的时候称为空树,在任意一颗非空树中:(1)有且仅有一个特定的称为根(root)的结点;(2)当n>1时,其余结点可以分为m(m>0)个互不相交的有限集T1、T2、T3…Tm,其中,每一个集合本身又是一棵树,并且称为跟的子树。结点:树的结点包含一个数据元素及若干个指向其子树的分支。度:结点拥有的子树称为结点...

2019-08-10 15:09:12 282

原创 数据结构(八)队列(链式)实现的功能

头文件#ifndef LINKQUEUE_H#define LINKQUEUE_H#include<stdio.h>#include<stdlib.h> #define SUCCESS 10000#define FAILURE 10001#define TRUE 10002#define FALSE 10003struct QueueNode ...

2019-08-09 21:13:48 237

原创 数据结构(七)队列(顺序)实现的功能

队列是特殊的线性表;队列仅在线性表两端进行操作;队头(Front):取出数据的一端;队尾(Rear):放入数据的一端;性质: 先进先出。长度= rear -front=(rear - front +size) %size SIZE是容量,上图中容量是11,长度10判断队满 : rear + 1 == front(rear + 1) % size == fron...

2019-08-08 20:46:55 288

原创 数据结构(六)栈(链表形式)实现的功能

链式栈的存储形式栈的链式存储结构:栈的链式存储结构,简称为链栈;栈顶放在单链表的头部;链栈是不需要头结点的。链栈不存在栈满的情况。头文件#ifndef LINKSTACK_H#define LINKSTACK_H#include <stdio.h>#include <stdlib.h>#include <time.h>#define...

2019-08-08 11:33:14 276

原创 数据结构(五)(顺序)栈实现的功能

栈是一个特殊的线性表,只能在一端操作;栈顶(top):允许操作 的一端;栈底(bottom):不允许操作的一端栈的性质: 先进后出,后进先出.1.栈是限定仅在表尾进行插入和删除操作的线性表;又称 后进先出的线性表。LIFO结构。栈顶top:允许插入和删除的一端;栈底bottom:另外一端;2. 空栈:不含任何数据元素的栈;top=-1;3. 栈的操作:进栈,压栈,入栈...

2019-08-08 10:30:08 215

原创 数据结构(四)线性表中链表:双向循环链表功能的实现

循环链表是单链表的变形。循环链表最后一个结点的 link 指针不 为NULL,而是指向了表的前端。(指向头结点)为简化操作,在循环链表中往往加入表头结点。循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。结构特点:头文件#ifndef CIRCLEDOUBLELINKLIST_H#define CIRCLEDOUBLELINKLIST_H 4 ...

2019-08-06 23:31:02 362

原创 数据结构(三) 双向链表的功能实现

双向链表是指在前驱和后继方向都能游历(遍历)的线性链表。双向链表每个结点结构:前指针域 prior | 数据域data | 后指针域 next前指针指向前驱方向,上一个结点;后指针指向后继方向,也就是下一个结点。这样指针就可与任意访问后面或者前面的,指针就可以不受单链表的约束,向前或向后移动。双向链表通常采用带表头结点的循环链表形式。头文件#ifndef DOUBLELINKLI...

2019-08-06 22:41:10 213

原创 数据结构(二)线性表(链表实现的功能)

链表链接表是线性表的链接储存表示。特点:每个元素(表项)由结点(Node)构成。一个元素有8byte;4byte的数据,4byte的指针(存放下一个节点的地址)4byte date | link 4byte线性结构 :结点可以连续,可以不连续存储结点的逻辑顺序与物理顺序可以不一致表可扩充头文件#ifndef LINKLIST_H#define LINKLI...

2019-08-04 17:03:02 330

原创 数据结构(一)线性表(顺序表实现的功能)

头文件#ifndef SEQUENCELIST_H#define SEQUENCELIST_H //必须和上面的一模一样,而且是大写#include<stdio.h>#include<stdlib.h>#include<time.h> //用到的头文件#define SIZE 10 #define SUCCESS 10000...

2019-08-02 09:23:20 557 1

原创 C语言(三)指针(二)

1.指针函数和函数指针函数指针:把函数的这个首地址(或者入口地址)赋予一个指针变量,使用该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针称为“函数指针变量”。定义的一般形式: 类型说明符(*指针变量名)();简单一点就是说,函数指针通过指针变量找到函数的入口地址并调用函数。指针函数:在C语言中,允许一个函数的返回值是一个指针(即地址),这种返回指针的...

2019-07-31 18:50:53 240

原创 C语言(三)结构体与联合体

1.结构体的概念结构体用struct 表示,结构体可以包含int

2019-07-27 13:48:15 285

原创 c语言(三) 指针(一)

1.外部变量外部static , extern存储方式 : 静态存储区: 静态存储区生存区: 程序整个运行期间作用域: 本文件 , 其他文件赋初值 : 编译时赋值,只赋一次未赋初值: 自动赋初值0或者空字符自动变量是最常用的。 关键字auto能够显式地指定存储类别。显式定义 auto int x,y;隐含定义 等价 int x,y;实际...

2019-07-25 14:47:33 377

空空如也

空空如也

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

TA关注的人

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