<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[半城烟沙的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/captain_8</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; captain_8]]></copyright><item><title><![CDATA[gdb ..]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/121208733</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/121208733</guid><author>captain_8</author><pubDate>Mon, 08 Nov 2021 15:30:27 +0800</pubDate><description><![CDATA[gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。一般来说，GDB主要帮助你完成下面四个方面的功能：
1、启动你的程序，可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。（断点可以是条件表达式）
3、当程序被停住时，可以检查此时你的程序中所发生的事。
4、你可以改变你的程序，将一个BUG产生的影响修正从而测试其他BUG。

一、普通命令
（gdb）help：查看命令帮助，具体命令查询在gdb中输入help + 命令,简写h
（gdb）run：重.]]></description><category></category></item><item><title><![CDATA[端序问题分析]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/120174323</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/120174323</guid><author>captain_8</author><pubDate>Thu, 09 Sep 2021 09:30:22 +0800</pubDate><description><![CDATA[通信协议中的数据传输、数组的存储方式、数据的强制转换等这些都会牵涉到大小端问题。

1、为什么会有大小端模式之分呢？

在计算机系统中，我们是以字节为单位的，每个地址单元都对应着一个字节，一个字节为8bit。

1个byte的存储不涉及端序，端序是字节之间，而不是bit之间。

且地址不管是对于大小端工作的CPU来说都是一样的从小到大的地址增长。

所以端序是指cpu读写内存时的高低顺序。

但是在C语言中除了8bit的char之外，还有16bit的short型，32bit的int型。另外，对于位数大于8位]]></description><category></category></item><item><title><![CDATA[Hash]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/115174675</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/115174675</guid><author>captain_8</author><pubDate>Wed, 24 Mar 2021 14:07:19 +0800</pubDate><description><![CDATA[Jenkins hash算法， memcached使用了此算法,普遍的被凯源项目所使用，是很好的ahsh算法之一。
Jenkins hash，可能是目前能看到的最好的hash算法之一，可以产生很好的分布，缺点是相比其他常见的hash算法更耗时。可以考虑用于hash表的open addressing实现上。如果想了解细节的话，可以去Bob Jenkins的站点看一看。


http://burtleburtle.net/bob/hash/

typedef  unsigned long int  u4;   ]]></description><category></category></item><item><title><![CDATA[Trex]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/107812829</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/107812829</guid><author>captain_8</author><pubDate>Wed, 05 Aug 2020 15:09:36 +0800</pubDate><description><![CDATA[1.环境准备

OS选择和安装

根据说明，trex支持常用的linux系统，本次使用的是ubuntu 16.04.1。

虚拟机配置需要能上网（虚拟机桥接到真实电脑物理网卡上网，此部分不赘述）

Trex环境安装

 1、新建trex工作目录 ：mkdir trex

 2、进入trex工作目录 ：cd trex

 3、下载安装包 ：wget --no-cachehttp://trex-tgn.cisco.com/trex/release/la...]]></description><category></category></item><item><title><![CDATA[libmxml]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/104785638</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/104785638</guid><author>captain_8</author><pubDate>Wed, 11 Mar 2020 10:07:48 +0800</pubDate><description><![CDATA[xml解析文档

https://www.cnblogs.com/liunianshiwei/p/6086577.html
]]></description><category></category></item><item><title><![CDATA[Cjson]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/104785239</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/104785239</guid><author>captain_8</author><pubDate>Tue, 10 Mar 2020 22:29:03 +0800</pubDate><description><![CDATA[JSON概述

　　JSON： JavaScript 对象表示法（ JavaScript Object Notation） 。是一种轻量级的数据交换格式。 它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式， 但是也使用了类似于C语言家族的习惯（ 包括C、 C++、 C#、 Java、 JavaScript、 Perl、 Python等） 。这些特性使JSON成为理想的...]]></description><category></category></item><item><title><![CDATA[数据交换格式XML & JSON]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/104784995</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/104784995</guid><author>captain_8</author><pubDate>Tue, 10 Mar 2020 22:22:07 +0800</pubDate><description><![CDATA[XML和JSON可以带信息描述,他们叫自述式的结构化文档
JSON 格式—— a:数据在名称|值对中
b.数据由逗号分隔
c.大括号保存对象
d.中括号保存数组

优点：1.具有自我描述性，易于阅读编写，也易于机器解析与生成
2.使用 Javascript语法来描述数据对象，但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态（PHP，J...]]></description><category></category></item><item><title><![CDATA[gdb基础篇]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/104479591</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/104479591</guid><author>captain_8</author><pubDate>Mon, 24 Feb 2020 16:16:54 +0800</pubDate><description><![CDATA[但为了更深入全面的学习，有必要了解gdb这款强大的调试工具。

1. gdb调试前准备


gcc -g -o hello hello.c


使用gcc编译时，一定要加上参数-g，不然生成的可执行文件hello不能调试，使用(gdb) file hello或gdb hello时，会报错：No symbol table is loaded. Use the "file" command.

(这个...]]></description><category></category></item><item><title><![CDATA[字符串匹配]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/104478962</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/104478962</guid><author>captain_8</author><pubDate>Mon, 24 Feb 2020 15:45:18 +0800</pubDate><description><![CDATA[KMP是一种模式匹配算法，什么是模式匹配呢？就是，现有一个模式串（字符串），要在另一个主串中查找是否存在与模式串相等的子串（主串中任意连续字符组成的子序列）。

该算法的用处广泛，是正则表达式的基础。

例如，有一个字符串为"ababcabcacbab"，我们想知道该字符串中有没有一个"abcac"的字符串，这就叫模式匹配。

普通模式匹配算法

经典的模式匹配，是让模式串的首字符从主串的首字符开...]]></description><category></category></item><item><title><![CDATA[八大排序算法]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/104478828</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/104478828</guid><author>captain_8</author><pubDate>Mon, 24 Feb 2020 15:39:31 +0800</pubDate><description><![CDATA[由此可见，排序算法尤为重要。以下介绍八大排序算法，都是从小到大排序。

1. 插入排序

i从1到n-1，每次将第i位的数插入到前面已排好序的序列中。

插入的方法为：将i与i-1位置的数比较，i小则交换并i--，i大则停止插入。




// 插入排序
void InsertSort(int *num, int n, int start, int grep)
{
    // 对第i个数...]]></description><category></category></item><item><title><![CDATA[gdb...]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/104429582</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/104429582</guid><author>captain_8</author><pubDate>Fri, 21 Feb 2020 17:01:35 +0800</pubDate><description><![CDATA[《用gdb查看内存/打印变量》
格式: x /nfu

参数说明：

x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量...]]></description><category></category></item><item><title><![CDATA[C的面相对象实现]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/100148660</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/100148660</guid><author>captain_8</author><pubDate>Thu, 29 Aug 2019 23:10:09 +0800</pubDate><description><![CDATA[多态性是面向对象程序设计的一个重要特征，利用多态性可以设计和实现一个易于扩展的系统。

顾名思义，多态的意思是多种形态，在C++程序设计中，多态指的是：具有不同功能的函数可以用同一个函数名，这样可以用一个函数名调用不同内容的函数。

C++的多态分两种：静态多态性和动态多态性。

1. C++中的函数重载和运算符重载实现的多态性就属于静态多态，在程序编译时系统就能决定调用的是哪个函数，因此静态多态...]]></description><category></category></item><item><title><![CDATA[学习资源搜集]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/99613809</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/99613809</guid><author>captain_8</author><pubDate>Wed, 14 Aug 2019 22:07:01 +0800</pubDate><description><![CDATA[libevent：

https://blog.youkuaiyun.com/sparkliang/article/category/660506

redis:

http://www.redis.com.cn/redis-tutorial

nginx：

http://tengine.taobao.org/book/index.html

Linux C API ：

https://wizardfor...]]></description><category></category></item><item><title><![CDATA[makefile多级目录递归]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/99611614</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/99611614</guid><author>captain_8</author><pubDate>Wed, 14 Aug 2019 21:31:13 +0800</pubDate><description><![CDATA[版权声明：本文为博主原创文章，遵循 CC 4.0 by-sa 版权协议，转载请附上原文出处链接和本声明。
本文链接：https://blog.youkuaiyun.com/G_Caesar_/article/details/52353081
先看一下make前后的目录结构对比



makefile会自动生成需要的文件夹:各个模块下src目录下的obj、target目录

各个模块下src/obj负责存...]]></description><category></category></item><item><title><![CDATA[C 编程修养]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/99565719</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/99565719</guid><author>captain_8</author><pubDate>Wed, 14 Aug 2019 14:25:41 +0800</pubDate><description><![CDATA[©著作权归作者所有：来自51CTO博客作者haoel的原创作品，如需转载，请注明出处，否则将追究法律责任

原文地址：https://blog.51cto.com/haoel/124713

感谢haoel分享，转载学习了。

-------------------------------------------------------------------------------------...]]></description><category></category></item><item><title><![CDATA[C编译过程]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/99455685</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/99455685</guid><author>captain_8</author><pubDate>Tue, 13 Aug 2019 17:47:13 +0800</pubDate><description><![CDATA[锲子

我们在各自的电脑上写下代码，得明白我们代码究竟是如何产生的，不想了解1，0什么的，但这几个环节必须掌握吧。

我们的代码会经过这4个环节，从而形成最终文件，c语言作为编译语言，用来向计算机发出指令。让程序员能够准确地定义计算机所需要使用的数据，并精确地定义在不同情况下所应当采取的行动。



预处理， 展开头文件/宏替换/去掉注释/条件编译（t...]]></description><category></category></item><item><title><![CDATA[C BuildError]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/99085709</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/99085709</guid><author>captain_8</author><pubDate>Sat, 10 Aug 2019 16:38:13 +0800</pubDate><description><![CDATA[记录C常见的build error，一些拼写错误就skip了

1.error: expected ‘)’ before ‘*’ token

这个一般出现在函数定义或申明的地方，重点检查是不是包含了函数中用到的变量类型的声明文件，或是变量类型是否写错了。

2.conflicting declarationhas a previous declaration as
这个错误可能是因为头文件没...]]></description><category></category></item><item><title><![CDATA[Vim]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/98526426</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/98526426</guid><author>captain_8</author><pubDate>Mon, 05 Aug 2019 22:09:54 +0800</pubDate><description><![CDATA[我们可以利用现有的脚本来配置，或是自己编写配置文件，这里主要讲解利用git上的脚本配置本地的vim插件，实现常用功能。

1.cscope

The plug-in: scope插件已经安装，cscope常用来快速跳转到相应的函数变量，但是在使用之前，需要建立某个文件下的所有依赖关系，然后应用才能跳转。

find ./ -name "*.h" -o -name "*.hpp" -o...]]></description><category></category></item><item><title><![CDATA[C  宏处理]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/98471315</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/98471315</guid><author>captain_8</author><pubDate>Sun, 04 Aug 2019 17:08:59 +0800</pubDate><description><![CDATA[1. 宏可以像函数一样被定义
#define min(x,y) (（x） &lt;（y）?（x）:（y)） 但是在实际使用时，只有当写上min()，必须加括号，min才会被作为宏展开，否则不做任何处理，参数必须加括号，防止展开错误。


2.#和##

#符号把一个符号直接转换为字符串，
#define ToSTRING(x) #x
const char *str = ToSTRING( tes...]]></description><category></category></item><item><title><![CDATA[libevent源码深度剖析二     Reactor模式]]></title><link>https://blog.youkuaiyun.com/captain_8/article/details/96765433</link><guid>https://blog.youkuaiyun.com/captain_8/article/details/96765433</guid><author>captain_8</author><pubDate>Sun, 21 Jul 2019 21:42:31 +0800</pubDate><description><![CDATA[原文：https://blog.youkuaiyun.com/sparkliang/article/details/4957744

前面讲到，整个libevent本身就是一个Reactor，因此本节将专门对Reactor模式进行必要的介绍，并列出libevnet中的几个重要组件和Reactor的对应关系，在后面的章节中可能还会提到本节介绍的基本概念。

1 Reactor的事件处理机制

首先来回想一下普...]]></description><category></category></item></channel></rss>