自定义博客皮肤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)
  • 收藏
  • 关注

原创 Tcpserver_learn

最近都在学习Tcp的网络编程,从编写一个简单的Tcpserver到使用select、poll、epoll来提高服务器处理的能力,了解了许多,觉得有必要进行一个简单的总结想要学习Tcpserver需要进行一些简单的练习,这里给出一些源码,希望能对你有所帮助https://github.com/ershengaaa/Tcpserver_learn ,觉得有用的同学可以给个star1. 常用头文...

2018-12-29 20:32:44 166

转载 Git和Github入门

1.环境的搭建第一步: 安装Git (下面是Linux下安装,windows直接搜索git安装下载)sudo apt-get install git第二步: 到 https://github.com/ 上创建GitHub帐号第三步: 生成ssh keyssh-keygen -t rsa -C "your_email@youremail.com"#your_email是你的email...

2018-12-29 15:15:28 125

原创 【Web动态网页设计作业】简单的JavaScript验证表单

编写一个JavaScript程序验证表单,其中,表单中有四个元素,分别是姓名,年龄,email,以及一个专业的复选框,其中专业选项为“计算机科学与技术”“通信工程”,“英语”。要求在表单提交的时候做如下判断:(1)姓名年龄和email三个元素的内容均不能为空;(2)年龄必须为数字;(3)email中必须有一个@符号。完全满足上述三个条件时方可提交,否则弹出给用户提示信息。(4)在此基础上,...

2018-12-27 21:38:13 7916 4

原创 网络IO模型--详解

IO概述1.同步IO与异步IO同步IO:必须等待IO操作完成后,控制权才返回给用户进程异步IO:无须等待IO操作完成,就将控制权返回给用户进程2.常见的网络IO输入操作:等待数据到达套接字接受缓冲区输出操作:等待套接字发送缓冲区有足够的空间容纳将要发送的数据服务器接收连接请求:等待新的客户端连接请求的到来客户端发送连接请求:等待服务器回送客户发起的SYN所对应的ACK3.网络...

2018-12-26 21:16:37 216

原创 嵌入式系统设计A【考纲】

第一章:嵌入式系统设计基础嵌入式系统的定义嵌入式系统一般由嵌入式微处理器、外围设备、嵌入式操作系统(可选),以及用户的应用软件系统等四个部分组成嵌入式系统与桌面通用系统的区别嵌入式系统中运行的任务是专用而确定的:形式多样、面向特定应用;桌面通用系统需要支持大量的、需求多样的应用程序嵌入式系统可采用多种类型的处理器和处理器体系结构;通用计算机采用少数的处理器类型和体系结构嵌入式...

2018-12-25 00:13:29 8144 36

转载 getsockopt和setsockopt函数

原文地址 getsockopt和setsockopt函数在Unix网络编程中通常用到getsockopt和setsockopt两个函数来获取和设置套接口的选项。getsockopt()函数用于获取任意类型、任意状态套接口的选项当前值,并把结果存入optval。#include <sys/socket.h>int getsockopt(int sockfd, int leve...

2018-12-24 20:53:13 769 1

原创 *** stack smashing detected ***: <unknown> terminated Aborted (core dumped)

今天在写一个简单TCP server的时候,出现了如下的错误:数据传输正常,但在结尾报了该错误,并引发了coredump,然后我的首先反应是调试该core dump(因为之前才了解如何用gdb调试coredump文件 gdb调试coredump),如下是我的调试结果:然后好像不太行(==哭唧唧 ==),然后又去找之前所写的出现coredump的原因:(1)内存访问越界 (2)多线程程序使用...

2018-12-24 20:21:46 19508

原创 TCP网络编程API----socket

网络层的IP地址可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样可以利用三元组(IP地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志(socket)与其它进程进行交互网络中的进程通过socket进行通信,那么什么是socket呢?socket其实就是一种特殊的文件,一些socket函数即是对其进行的操作(读/写、打开、关...

2018-12-23 15:29:09 462

原创 TCP的有限状态机--【全面解析】

了解Tcp的有限状态机,有助于我们理解Tcp的3次握手与四次挥手CLOSED:表示初始状态LISTEN:表示服务器端的某个socket处于监听状态,可以接受连接SYN_SENT:在服务端监听后,客户端socket执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入SYN_SENT状态,等待服务端的确认SYN_RCVD:表示服务端接收到了SYN报文,发送SYN+ACK,当...

2018-12-23 09:38:11 2375

转载 Linux网络编程常用头文件--【超全】

原文地址:Linux网络编程常用头文件sys/types.h:数据类型定义sys/socket.h:提供socket函数及数据结构netinet/in.h:定义数据结构sockaddr_inarpa/inet.h:提供IP地址转换函数netdb.h:提供设置及获取域名的函数sys/ioctl.h:提供对I/O控制的函数sys/poll.h:提供socket等待测试机制的函数...

2018-12-22 21:48:10 3547

原创 内存检查工具valgrind

1. valgrind概述Valgrind是一套Linux下的开放源代码的仿真调试工具的集合。valgrind由内核以及基于内核的其他调试工具组成。Valgrind包括以下的一些工具:Memcheck:一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况(比如使用未初始化的内存、使用已经释放了的内存、内存访问越界等)Callgrind:收集程序运行时的一些数据,建立函数调用关系...

2018-12-20 18:55:16 398

原创 gdb分析coredump文件

文章目录1. coredump1.1 coredump简介1.2 coredump的文件存储路径1.3 coredump产生的条件1.4 coredump产生原因2. 测试生成coredump1. coredump1.1 coredump简介core dump,又称为核心转储,是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状态的其他信息写出的一个磁盘文件co...

2018-12-19 20:15:57 12864

原创 Linux调试分析--strace

1. 写在前面在前面接触到了gdb这一有效的调试工具【linux】GDB调试,现在让我们来接触strace这一linux下的调试分析利器首先我们知道gdb类似于我们常用的编程工具如vs、DEV中的debug,具有我们在那些编程工具中调试的所有功能;而strace与这一类的调试工具有很大的不同,strace是一个通过跟踪系统调用来让开发者知道一个程序在后台所做事情的工具既然提到了系统调用,那就...

2018-12-18 20:36:58 1062

原创 vim超实用详细配置【附操作步骤】

在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进等功能的。为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc。在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本,所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,即创建的命令为:$vi ~/.vimrc设置完后$:...

2018-12-18 19:19:05 2048

原创 【ELF】目标文件详解

目标文件ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式;使用ELF标准的目的是为软件开发人员提供一组二进制接口定义,这些接口可以延伸到多种操作环境中,从而减少重新编码、编译程序的需要目标文件有三种类型,都是ELF文件类型1.可重定位的目标文件由汇编器汇编生成的.o文件,链接器拿一个或一些可重定位的目标文件作为输入,经链接处理后,生成一个可执行的目标文...

2018-12-18 15:12:14 696

原创 简单编写makefile

1. 为什么需要编写makefile1.一个工程中的源文件不计其数,按类型、功能、模块分别放在若干目录中,若尝试一个个文件编译,未免效率太低,而编写一个良好的makefile则会提高我们编译的效率2.在makefile中,我们可以定义一系列的规则,指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译。甚至于进行更复杂的功能操作,给我们在编译过程中带来极大的便利3.makefil...

2018-12-17 21:04:11 1350

原创 【浅谈】编译与链接

文章目录1. 编译与链接2. 预处理3. 编译与汇编4. 链接4.1 静态链接4.2 动态链接4.3 静态链接库、动态链接库各自的特点1. 编译与链接编译与链接的过程可分解为四个步骤,分别是预处理、编译、汇编以及链接,可以用一张图来描述此过程:2. 预处理我们接下来都以示例来描述相应的过程以这样的一个示例:#include &lt;iostream&gt;using names...

2018-12-17 10:26:47 335

原创 【探索】vector的内存管理与效率

文章目录1. 使用reverse()函数提前设定容量大小1.1 提前设定的原因-1.2 提前设定的原因-|1.3 使用reverse的情况2. 修整vector过剩空间3. 用swap方法释放vector所占内存1. 使用reverse()函数提前设定容量大小1.1 提前设定的原因-对于vector和string,如果需要更多的内存空间,就会以类似realloc的思想来增长大小。vect...

2018-12-16 23:40:01 726

原创 【嵌入式课程实验报告】QEMU模拟Cortex-A9运行U-boot和Linux

文章目录1. 实验目的2. 实验要求3. 实验原理4. 实验步骤4.1 实验准备4.2 安装QEMU4.3 编译并运行U-boot4.4 编译并运行Linux4.4.1 生成内核映像文件4.4.2 制作根目录系统4.4.2.1 编译busybox4.4.2.2 制作根文件系统目录4.4.2.3 根文件系统镜像4.4.3 QEMU运行Linux系统4.5 在目标机运行应用程序5. 思考题6. 个人...

2018-12-15 21:56:39 5884 7

原创 对象的存储空间 || 虚析构函数

对象存储空间的探讨在实际了解对象的存储空间之前,相信大家也或多或少在某些地方看到过介绍有关一个对象的存储空间有多大,但有没有深入去了解关于一个对象为什么需要这么大的内存空间?到底是什么导致一个对象占了这么大的内存空间?让我们通过几个简单的例子来先了解一下一个对象所占用的内存空间简单test空类存储空间的计算:#include &amp;lt;iostream&amp;gt;using namesp...

2018-12-10 16:57:14 306

原创 结构体与共用体字节数计算

写在前面以前所了解的字节数计算,都想当然的以为将所有数据类型所占的字节数叠加即成了总的字节数,直到今天遇到了这一类问题才好好研究了一下,发现这里面竟有很多我不曾掌握的知识点,那么现在就来学习一下如何计算结构体与共用体、两者相互嵌套的字节数计算内存对齐首先在计算这两者的字节数之前,需要了解有关内存对齐,不然做题时容易不知所措内存对齐的原因1、平台原因(移植原因):不是所有的硬件平台都能...

2018-12-09 23:24:22 3746 4

原创 判断系统是大端还是小端

文章目录大端与小端判断大端、小端的三种方式直接观察变量的内存值强制转换:将&amp;int转换为char*使用联合体union进行判断大端与小端大端模式:指数据的高字节保存在内存的低地址中,低字节保存在高地址中小端模式:指数据的高字节保存在内存的高地址中,低字节保存在低地址中判断大端、小端的三种方式直接观察变量的内存值#include &lt;iostream&gt;using na...

2018-12-09 17:49:16 2651

原创 动态规划概述

关于动态规划首先我们要学习动态规划这一解题方法,就首先要了解何为动态规划方法动态规划方法是一种对具有交叠子问题的问题进行求解的技术。一般来说,这样的子问题出现在求解给定问题的递推关系中,这个递推关系中包含了相同类型的更小子问题的解...

2018-12-08 21:55:18 176 1

原创 深度探索C++对象模型【第二章】

1. 默认构造函数1.在C++构造函数中,编译器会做你很多不知道的事,而引入关键词explicit,正是为了防止构造函数被隐式转换2.当编译器需要的时候,才会合成默认构造函数,而且被合成出来的构造函数只执行编译器所需的行动;如果是程序本身需要,则承担责任的是设计类的人3.下面讨论四种必须为类合成默认构造函数的情况:如果一个类没有任何的构造函数,但它内含一个成员对象,而这个对象有默认构造函...

2018-12-08 17:13:07 210

原创 浅拷贝与深拷贝

浅拷贝与深拷贝概述简单来说,浅拷贝就是在有指针的情况下,拷贝该指针,得到的新指针与原指针指向同一块内存;而深拷贝就是拷贝该指针,并申请一块新内存,使得新指针指向该新内存采用深拷贝时不会出现在浅拷贝时重复释放指针造成内存泄漏的情况!!!简单说明浅拷贝与深拷贝如果用户未定义拷贝构造函数,则编译器会默认合成一个拷贝拷贝函数来完成构造(之后将在C++对象模型的学习中深入了解)以一个简单的例子...

2018-12-06 20:26:12 267

原创 【linux】 GDB调试

文章目录写在前面推荐termiusgdb调试写在前面最近开始学习linux,关于linux的一些基本命令以前或多或少接触过一些,但未深入了解,有关于GDB调试只是听过该名字,没有动手尝试过,但作为一个“有梦想”的程序员,balabala…所以学习gdb调试是基础的、也是必要的推荐termiustermius,是一个可以远程连接你的云主机的一个软件,在windows、Android及Mac上...

2018-12-05 18:09:00 1229

原创 深度探索C++对象模型【第一章 】

1.在C语言中,“数据”和“处理数据的操作”是分开来声明的,语言本身并没有支持“数据和函数”之间的关联性2.上述这种程序性的程序方法,由一组“分布在各个以功能为导向的函数中”的算法所驱动,它们处理的是共同的外部数据3.在C++中,使用ADT(abstract data type,抽象数据类型)来实现函数与数据的封装4.加上封装后的布局成本(布局以及存取时间上的成本):1.数据和普通的成员...

2018-12-03 17:44:05 227

原创 深度探索C++对象模型【前言】

什么是C++对象模型有两个概念可以解释C++对象模型:1.语言中直接支持面向对象程序设计的部分2.对于各种支持的底层实现机制

2018-12-03 09:49:56 104

原创 STL源码剖析(五)【hash_set、hash_map】

hash_set与set区别及联系与set大同小异,set以RB-tree作为其底层,而hash_set以hash table作为其底层两者都是借由其底层操作完成我们所看到的那些操作二者最大的不同在于set的底层RB-tree有自动排序功能,所以反映在set中也含有自动排序功能,而hashtable并无自动排序功能,自然hash_set也无自动排序功能运用hash_set#incl...

2018-12-02 16:33:52 399

原创 STL源码剖析(五)hashtable

文章目录1. hashtable概述1.1 线性探测1.2 二次探测1.3 开链法2. hashtable的桶与节点3. hashtable迭代器4. hashtable数据结构5. hashtable构造与内存管理6. 元素操作7. hash functions1. hashtable概述hashtable,即我们在数据结构中所说的散列表,也叫哈希表,在插入、删除、搜寻等操作上具有“常数平...

2018-12-02 01:18:02 610

空空如也

空空如也

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

TA关注的人

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