月份:2014年12月

Home / 月份:2014年12月

YouCompleteMe

2014-12-31 22:51:04 | Tool | 没有评论

最近用了一段时间VS,感觉用了几年的VIM显得有些单薄,主要是代码提示方面,补全啥的,那么又有人会说那样不好,对你熟悉代码有影响,就像有的人喷Source Insight的理由就是用到最后某个函数在哪个文件当中都不清楚了,与不停地敲对象的结构体内容相比,突然有一种找找舒适的感觉的冲动,还是决定在VIM上动刀子,毕竟EMACS一般不太会有人安装,而VIM一般都会有,而且可以远程SSH操作,有的只有V[……]

Read more

libpcap读取本地pcap文件

2014-12-30 16:35:09 | Libpcap | 没有评论

假如本地已经通过抓包工具保存了pcap格式的数据包文件,通过libpcap的库也能简单地进行离线分析

pcap_t *
pcap_open_offline(const char *fname, char *errbuf)

函数打开保存的数据包文件,用于读取,返回文件描述符

fname参数指定了pcap文件名

errbuf依旧是函数出错的时候返回错误信息

这样直接分析离线数据包文件,然后通过pcap_[……]

Read more

libpcap开始抓包

2014-12-30 01:11:34 | Libpcap | 没有评论

下面就开始抓包了

在前面获取了网口之后(或者不需要或者直接设定),需要打开:

pcap_t *
pcap_open_live(const char *source, int snaplen, int promisc, int to_ms, char *errbuf)

这个函数打开设备,然后返回一个pcap_t类型的指针,实际上就是获得用来捕获网络数据包的描述符

source是pcap_lookupd[……]

Read more

VMware ESXi配置多块物理网卡

2014-12-29 23:52:52 | Virtualization | 没有评论

VMware ESXi和VMware Workstation最大的不同是可以独立地安装和运行在裸机上,而不会依赖宿主在一个操作系统之上,本身就相当于一个云操作系统,而在这一套管理体系中,你可以随意创建虚拟机,可以随意部署自己的操作系统,当然整个服务器的资源分配自己控制,也就是用户可以看到自己专属资源的应用程序,而服务器可以做资源管理,完全是云的模子

今天需要在一个ESXi环境里布置一个系统,测试系[……]

Read more

编译过程

2014-12-28 16:35:35 | Compiler | 没有评论

平时用的GCC实际上是一些后台程序的包装,假如手动编译一个新版本的gcc以及它的所有依赖模块,单核估计会耗费你几十分钟的时间,安装过程中可以看到as,ld之类的可执行程序安装到系统目录下,实际上gcc就是这些程序的包装,它根据不同的参数去调用相应的程序,比如预处理编译程序cc1,汇编器as,链接器ld

编译过程是将高级语言翻译成机器语言,应该算是程序完成过程最关键的地方,结合《程序员的自我修养》,[……]

Read more

PHP继续爬主页

2014-12-26 23:58:26 | PHP | 没有评论

半夜看着同学新换的cnblogs,瞧了瞧主页html的内容,居然标签内容和wordpress相差甚远,显然不是一家人,不来一家模子,看着痒痒的,继续来爬一把,这次懒得用python爬,比较单调,换换口味,用好久没动过手的PHP爬一爬,其实思路大同小异,只不过处理细节差异而已

先拿自己的wordpress试试水,还是通过正则表达式找到相关分类目录行,然后截取出关键字,做起来比较简单,就直接以脚本形式[……]

Read more

十个值得关注的c开源项目

2014-12-26 20:59:22 | Linux C | 没有评论

前几天让同事有福推荐点开源软件研究下,随口给我推荐了cJSON,然后其它还有一些都写在了他的个人主页上,我就直接转过来了,当然转载的要厚道,有兴趣可以关注他写的其它内容,传送门:http://youfu.xyz

这个文章是在知乎看到别人推荐,觉得说的挺不错摘抄过来的。
这个上面的加上上一篇编程水平进阶之路,我觉得够c程序员吃一壶的了。

1. Webbench

Webbench是一个在linux下使用[……]

Read more

如何动手更solid

2014-12-25 23:32:59 | Linux C | 没有评论

Boss有句口头禅:“XXXX做得不solid”!由于这个[‘salid’]读音很发人深省因此在我们同事之间广为流传!

今天在调试的时候,很流利地重写了一些代码,令人费解的是死活不出结果,自我感觉应该很solid呀,刚刚才发现是为了调试json结构体的type其中两种情况true和false的意义,将需要处理的json文件多添加了一行“lihui”:why,当时为了确认如果是true/false是[……]

Read more

cJSON库之解析json部分

2014-12-24 23:55:24 | Linux C | 没有评论

cJSON是一个处理json的开源C库,它有构造json和解析json文件两部分,由于还没完全摸索完,先将解析json这部分钻研下

处理json是一个用的比较多的过程,用脚本语言的话应该python最简单了,内置字典类型,想得到json文件里的key-value的话:

pf = open(json_file, ‘r’)

decode_json = json.load(pf)

print decod[……]

Read more

Linux库文件

2014-12-24 00:39:47 | Linux | 没有评论

静态库一般后缀为.a,lib和.a之间就是库的名字,由于整个库的内容都被整到了目标代码中,因此编译出来的执行程序比较大,但是优点就是不需要再依赖外部的函数库,当然如果静态库内容变了,整个程序也必须得重新编译;使用静态库,链接器会找出程序所需要的函数,然后将他们完整copy到执行文件,因此一旦链接成功,静态库也就不需要了

动态库一半后缀为.so,lib和.so之间就是库的名字,当然有时候还包括版本号[……]

Read more

VMware ESXi 5.0配置

2014-12-23 11:42:19 | Virtualization | 没有评论

换了一台联想的旧笔记本,终于ESXi 5.0 has been sucessfully installed,但是貌似只有60天的使用期限,先用了再说,看看它到底如何设置licence的,是不是网络同步

1:ESXi所在机器网络配置

进入下面这段的时候,停顿了半天,我还以为要下载什么tool:

Download tools to manage this host from: http://192.1[……]

Read more

VMware ESXi 5.5无法识别r8169网卡驱动

2014-12-22 16:30:44 | Virtualization | 没有评论

Boss要求安装一个VMware ESXI,然后将我们的系统运行在ESXI里的操作系统里,测试一下性能,找了一台没人用的笔记本,开工

1:vmware官网下载一个iso:VMware-VMvisor-Installer-5.5.0.update01-1623387.x86_64.iso

2:刻盘

3:塞进DELL的笔记本,reboot,前面检查没出错,但是卡在了这一步:

No Network Ad[……]

Read more

快速排序

2014-12-21 16:26:31 | LeetCode | 没有评论

快速排序WIKI上这么描述的:

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists),步骤为:

(1)从数列中挑出一个元素,称为“基准”(pivot)

(2)重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边),在这个分区退出之后,该基准就处于数列的中间位置,这个称为分区([……]

Read more

分配表:默认行为

2014-12-20 23:23:24 | Perl | 没有评论

写完前面那篇,感觉十分有价值,突然也想起公司里咋们平时开玩笑的有关架构的评论

分配表是数据,而不是代码,所以它可以在运行时改变,你可以在你想的任何时候插入新的指示到表里;也就是消除了if-else树,更大的价值在于不用在配置里添加了新的内容的时候,又要找到读取,行为函数里,添加读取内容的else if以及一堆或许十分复杂的处理函数,让整个处理过程显得十分的臃肿,可读性比较差;而通过分配表,只需要修[……]

Read more

perl回调

2014-12-20 21:30:10 | Perl | 没有评论

下面是随手写了一个简单的列子,看上去比较分离而且绕的调用方式

#!/usr/bin/perl -w

sub foo {
    my ($a, $b, $out) = @_;
    if ($a > $b){
        $out->($a, $b);
&nb[……]

Read more

陈黑客介绍libpcap

2014-12-18 22:55:02 | Linux C | 没有评论

这篇摘抄自背后同事有福大神,作为黑客的他他已经成功在乌云漏洞平台提交了多个漏洞,想膜拜的可以传送到:youfu.xyz,除此之外在公司做了快4年底层的他,libpcap应该是手到擒来,我觉得这篇写的比较有特色,不是那么千篇一律念文字废话连篇,就残忍地COPY过来了,方便我以后用的时候查阅

查看pcap.h文件, 可以看到libpcap给出的对外接口。
平时使用libpcap捉包常用的数据结构和API[……]

Read more

层序遍历

2014-12-17 23:40:01 | Linux C | 没有评论

本来以为四种遍历方法用递归都很容易解决,谁知看上去最直观的层序遍历不是太容易,参考了下通过链式队列的实现算法,完成了这项遍历

首先将根结点数据输出,并将根结点入队列,然后前端结点出队列,并输出该结点的数据域,如果该结点的左右孩子结点存在,也入队列,由于一个结点的孩子结点在该结点所在层的下一层,而且左孩子结点会在右孩子结点之前入队列,所以如此就能满足层序遍历的顺序,持续地出队列,输出数据域,入队列过[……]

Read more

二叉树遍历

2014-12-17 00:57:32 | Linux C | 没有评论

二叉树的遍历方式有多种,名字天花乱坠,没必要去死记,不管是前序,后序等等,关键以双亲结点为中心,所谓前序还是后序实质上就是一个双亲结点和左右子结点为一个小的集体中双亲结点是先遍历还是后遍历,然后许多这样的小集体不停递归的过程,知道了这点,根据不同的遍历方式,首先认准双亲结点啥时候遍历,然后找好先后关系,很容易就能够画出来遍历结果,下面这些情况也就迎刃而解了

前序遍历:先访问根结点,然后前序遍历左子[……]

Read more

2014-12-17 00:54:16 | Linux C | 没有评论

普通的树有很多种表示方法

双亲表示法,data是数据域,存储结点的数据信息,而parent是指针域,存储该结点的双亲在数组中的下标

树的双亲表示法数据结构:

typedef int TElemType;

typedef struct PTNode {

    TElemType data;

    int parent;

}PTnode;[……]

Read more

双向链表

2014-12-14 01:20:52 | Linux C | 没有评论

单链表总是从头到尾来寻找结点,有了next指针,需要查找下一个结点的时间复杂度为O(1),但是如果要查找的是上一个结点的话,最坏的时间复杂度是O(n),原因是因为每次都必须要从头开始遍历查找

双向链表是在单链表的每个结点中,再设置一个指针,因此每个结点都有指针,分别指向直接后继和直接前驱,所以从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱和后继结点

双向链表数据结构

typedef s[……]

Read more

malloc

2014-12-12 00:51:29 | Linux C | 没有评论

在内存的动态存储区中分配一定长度的连续空间,返回一个指向所分配的连续存储空间的起始地址的指针;动态分配是在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法;动态内存分配不像数组等静态内存分配方法那样预先分配存储空间,而是由系统根据程序的需要即时分配,而且分配的大小是程序要求的大小

malloc库函数的参数是一个无符号整型,当函数没有成功分配存储空间的时候,就会返回一个NULL指针,因此在[……]

Read more

查询驱动支持的网卡类型

2014-12-11 00:51:24 | Linux C | 没有评论

首先查询该机器的网卡类型,通过命令可以查看到各种类型网卡

# lspci | grep Net
02:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.1 SCSI storage controller: Intel Corporation I350 Gigabit Ne[……]

Read more

串的存储结构

2014-12-9 00:49:36 | Linux C | 没有评论

串是由零个或者多个字符组成的有序序列,又叫字符串

串的逻辑结构和线性表相似,但是串针对的是字符集,也就是串中的元素都是字符,更关注的是查找子串的位置,得到,替换指定位置的子串,线性表更关注的是单个字符的操作,比如查找,插入,删除一个元素

串顺序存储结构是用一组地址连续的存储但愿来存储串种的字符序列的,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区,一般是用定长数组来定义

顺序串数据结[……]

Read more

HTTP X-Forwarded-For

2014-12-8 23:06:10 | HTTP | 没有评论

今天在写unit test的时候,x-forwarded-for这个域结果不一致,输入是将所有的IP域都给计算了,而输出部分仅仅把一条HTTP连接里的x-forwarded-for域算一个

一个网页请求经过了HTTP代理服务器以后,看似无法获得访问者的真实IP,因为:TCP连接是在代理和web服务器之间,而并非用户和web服务器之间的;HTTP协议是第七层协议,不会把IP层的访问者的源IP信息也发[……]

Read more

队列链式存储结构

2014-12-7 23:48:17 | Linux C | 没有评论

队列的链式存储结构其实就是线性表的单链表,只不过它只能尾进头出而已,为了方便,将队列头指针指向队列的头结点,队尾指针指向终端结点

空队列时,front和rear都指向头结点,此时已经有一个结点了,所以有一点要注意的就是在出队的时候,都是讲头结点的后继结点出队,这一点刚在写的时候一直出错

链式队列数据结构:

typedef int QElemType;

typedef struct QNode {

[……]

Read more

循环队列

2014-12-7 01:24:36 | Linux C | 没有评论

一晚上到处转弯,本来顺序队列说好的出队之后,所有元素都要相应移动的,这会又突然出来一个循环队列,看样子不是这规矩

队列如果后面满了,就再从头开始,也就是头尾相接的循环,这种头尾相接的顺序存储结构为循环队列

由于空队列的时候,front等于rear,可如今这样队列后面满了就从头开始的,那么整个队列满了的时候front也等于rear,就会产生矛盾,弄一个flag不太方便,所以设定队列为空的条件还是fr[……]

Read more

顺序队列出队列的特点

2014-12-6 23:47:43 | Linux C | 没有评论

上篇草草了事以为OK,实际上根本没弄清楚FIFO的特点,那段程序输出的结果是从下标3开始的,也就是0,1,2三个元素给pop了之后,原封不动地将其他元素输出来,本以为自己做完了,其实一开始就错了

队列的入队只需要队尾插入一个元素,然后下标加1;但是队列的出队是在队头,也就是下标为0的位置,如果有元素出队,其它所有的元素都必须要向前移动,以保证队列的队头,也就是下标为0的位置不能为空

队列出队列一定[……]

Read more

队列顺序存储结构

2014-12-6 23:14:05 | Linux C | 没有评论

公司的产品比较核心的地方用到了一个FIFO,虽然从没有去看看到底有多么复杂,但自己摸索下简单的队列还是可以滴,队列只允许在一端来进行插入操作,而在另一端来进行删除操作的线性表,也就是一种先进先出的线性表,First In First Out,所以就叫FIFO,插入的一端为队尾,删除的一端为队头,这样比较符合思维

数据结构:

typedef int QElemType;

typedef struct[……]

Read more

栈链式存储结构

2014-12-6 00:26:45 | Linux C | 没有评论

栈顶用来做插入和删除操作,而单链表有个头指针,并且栈顶指针也是必须的,所以将它们合二为一,将栈顶放在单链表的头部,由于有了栈顶在头部,单链表中比较常用的头节点也没什么意义了,因此一般来说链栈不需要头结点,链栈为空也就是top=NULL

链栈数据结构:

typedef struct {

    StackElemType data;

   [……]

Read more

Shell里独特的if语句

2014-12-5 15:52:47 | Shell | 没有评论

今天在写分支的时候,一段代码硬是不执行,最后一点点测试才发现居然是if 0居然为真,没有想到会是这个问题,浪费很会时间

#!/bin/bash

if [ “$#” ];
then
    echo “yes”
else
    echo “no”
fi

大概意思就是,这个小例子当中本来是为了判断脚本执行是否携带参数,然后不同的处理,结果不管if里面[……]

Read more