C和C++
finleyzhang
Everything you can do I can do better
展开
-
嵌入式web服务器BOA源码解析
在这里插入代码片@TOCBOA是一个单进程的web服务器,支持CGI交互,浏览器每次发送一个POAT请求,BOA会对应fork一个CGI进程,数据发送完成后,CGI进程退出,尽管存在这样的进程创建和销毁的开销,但BOA仍然是一款轻量级的web服务器,适用于需要较为简单的web页面访问。下面对BOA的主要部分进行代码分析,包含GET和POST两种方法。GET和POST对客户端请求数据的解析过程都...原创 2020-02-09 21:59:37 · 2140 阅读 · 0 评论 -
linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间
linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较转载 2014-10-30 19:19:26 · 526 阅读 · 0 评论 -
linux下 fork(),vfork(),clone()的用法及区别
fork,vfork,clone都是linux的系统调用,用来创建子进程的(确切说vfork创造出来的是线程)。先介绍下进程必须的4要点:a.要有一段程序供该进程运行,就像一场戏剧要有一个剧本一样。该程序是可以被多个进程共享的,多场戏剧用一个剧本一样。b.有起码的私有财产,就是进程专用的系统堆栈空间。c.有“户口”,既操作系统所说的进程控制块,在linux中具体实现是task_st原创 2014-11-18 16:07:34 · 474 阅读 · 0 评论 -
C++ 多重继承和虚继承的内存布局
多重继承首先我们先来考虑一个很简单(non-virtual)的多重继承。看看下面这个C++类层次结构。1class Top2 {3 public:4 int a;5 };67 class Left :public Top8 {9 public:10 int b;11 };1213 class Right :转载 2015-10-01 19:04:15 · 717 阅读 · 0 评论 -
找出带环单向链表的环入口(交点)
其实这个问题已经被问烂了,但是之前没有想透,今天算是解决得差不多。找环的入口这个问题,其实是建立在另外一个问题之上的——判断单向链表是否有环土方法很多,但是比较好的目前就那么一个:一开始设置两个指针都指向表头,其中一个每次(一步)前进一个节点的叫p1,另外那个每次(一步)前进两个节点的叫p2 。p1和p2同时走,当其中有一个遇到null,就证明链表没有环。如何某个时刻(假设走了n步之后),转载 2014-10-10 09:07:00 · 378 阅读 · 0 评论 -
构造函数
c++类的构造函数详解 一、 构造函数是干什么的class Counter{public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value =转载 2014-07-31 15:00:16 · 335 阅读 · 0 评论 -
C语言中可变参数的用法
目录(?)[-]C语言可变参简介写一个简单的可变参数的C函数 可变参数在编译器中的处理 可变参数在编程中要注意的问题 小结 C语言可变参简介我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的: int printf( const char* format, …); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变转载 2016-12-16 10:02:47 · 298 阅读 · 0 评论 -
文章标题STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统。但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也转载 2017-03-07 09:55:08 · 336 阅读 · 0 评论 -
STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统。但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再转载 2017-03-07 10:01:15 · 382 阅读 · 0 评论 -
VC读取mat格式文件
1. 首先设置Visual C++6.0 编译环境的设置1-1通过菜单 Tools/ Options,打开Visual C++6.0设置属性页,进入 Directorie页面,在 Show Directories for下拉列表中选择Include Files,添加路径:…PROGRAM FILESMATLABR2007AEXTERNINCLUDE(在Matlab的安装路径下),转载 2014-09-17 21:27:27 · 780 阅读 · 0 评论 -
关于volatile和synchronized
这个可能是最好的对比volatile和synchronized作用的文章了。volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符。所以我们使用这两种关键字来指定三种简单的存取变量的方式。 int i1; int geti1() {return i1;}volatile int i2;转载 2014-09-26 15:21:48 · 397 阅读 · 0 评论 -
结构体中的函数指针
结构体中指向函数的指针 C语言中的struct是最接近类的概念,但是在C语言的struct中只有成员,不能有函数,但是可以有指向函数的指针,这也就方便了我们使用函数了。举个例子,如下:#include #include #include typedefstruct student{ int原创 2013-11-28 15:32:09 · 608 阅读 · 0 评论 -
我用C语言描述女人
有的女人就像Windows 虽然很优秀,但是安全隐患太大有的女人就像UNIX 她条件很好,然而不是谁都能玩的起有的女人就像C# 长的很漂亮,但是家务活不行。有的女人就像C++,她会默默的为你做很多的事情。 有的女人就像JAVA,只需一点付出她就会为你到处服务。 有的女人就像JAVA script,虽然对她处处小心但最终还是没有结果。 有的女人就像汇编 虽然很麻烦,但是有的转载 2014-01-11 10:58:47 · 529 阅读 · 0 评论 -
LINUX内核和驱动中常见的 C语法---》标记化 初始化
在标准C中(C89)结构标准初始化是用{}来实始化,在C99的版本,采用了采用可读性更强的标记化 初始化,这在LINUX内核和驱动很为常见。这是ISO C99的用法 C Primer Plus第五版中相关章节: 已知一个结构,定义如下 struct book { char title[MAXTITL]; char author[MAXAUTL];转载 2014-03-12 10:25:47 · 672 阅读 · 0 评论 -
*lds ----linux下的通用链接脚本
ELF(Executable and Linkable Format)格式,linux平台下十分常见的可执行、可连接文件。输出section的丢弃:例子,.foo { *(.foo) },如果没有任何一个输入文件包含.foo section,那么连接器将不会创建.foo输出section。但是如果在这些输出section描述内包含了非输入section描述命令(如符号赋值语句),那么连转载 2014-03-12 10:27:12 · 1084 阅读 · 0 评论 -
QT在windows下的安装与配置
先了解Qt: Qt一直以来,分为商业、开源两个版本,商业版本为用户提供了二级制的动态库,直接安装既可以使用,但是需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才能生产动态库文件。自从诺基亚公司放弃Meego、遣散Qt开发团队以后,Qt商业版本的网站移到了qt.digia.com,而开源版本则放到了qt-project.org转载 2014-04-02 13:22:24 · 504 阅读 · 0 评论 -
Qt Creator的配置和开发初步测试
关于编译与安装的内容请参考:Linux 下编译、安装、配置 QT交叉编译QT 4.8.3本篇博客主要记录3方面的内容1、Linux下Qt Creator的配置,这部分是以前面两篇文章的工作为基础,进行一些细节配置.2、分别运行桌面版和开发板上的小程序,验证QT的跨平台特点。3、安装Windows下的开发环境,此部分也是基于Qt Creator 有了L原创 2014-04-02 13:24:16 · 596 阅读 · 0 评论 -
JPEG图像的解压缩操作
解压缩操作过程1. 为JPEG对象分配空间并初始化2. 指定解压缩数据源3. 获取文件信息4. 为解压缩设定参数,包括图像大小,颜色空间5. 开始解压缩6. 取出数据7. 解压缩完毕8. 释放资源 为JPEG转载 2014-06-23 21:44:49 · 589 阅读 · 0 评论 -
有符号及无符号位域值的测试
********************************************************************* * Author : Samso * Date : 04/02/2014 * Test platform: * Linux ubuntu 3.2.0-58-generic-pae *转载 2014-08-04 18:57:24 · 559 阅读 · 0 评论 -
malloc 函数
malloc函数 原型:extern void *malloc(unsigned intnum_bytes); 头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。) 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。 当内存不再使用时,应使用f原创 2013-11-28 15:13:05 · 512 阅读 · 0 评论