C/C++
文章平均质量分 86
updoing
用六十秒創造六十一秒的奇跡!
展开
-
Snort分析报告
1.--snort的简介 snort 是一个基于libpcap的数据包嗅探器并可以作为一个轻量级的网络入侵检测系统( NIDS)。所谓的轻量级是指在检测时尽可能低地影响网络的正常操作,一个优秀的轻量级的NIDS应该具备跨系统平台操作,对系统影响最小等特征并且管理员能够在短时间内原创 2011-07-08 17:30:20 · 3717 阅读 · 0 评论 -
WM算法详解
提到多模式匹配算法,就得说一下Wu-Manber算法,其在多模式匹配领域相较于Aho-Corasick算法,就好象在单模式匹配算法中BM算法相较于KMP算法一样,在绝大多数场合,Wu-Manber算法的匹配效率要好于Aho-Corasick算法。这个算法是由吴升(台湾)和他的导师Udi Manber在九十年代提出。当然,要想充分理解WM算法如何加快多模式匹配的效率,还需要对BM算法的深刻了解,可以原创 2012-04-01 17:47:00 · 995 阅读 · 0 评论 -
单链表逆序
设链表节点为 typedef struct tagListNode{ int data; struct tagListNode* next; }ListNode, *List;要求将一带链表头List head的单向链表逆序。分析: 1). 若链表为空或只有一个元素,则直接返回; 2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指原创 2012-03-16 21:41:53 · 356 阅读 · 0 评论 -
KMP算法详解
KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,第一次接触该算法的读者往往会看得一头雾水,主要原因是KMP算法在构造跳转表next过程中进行了多个层面的优化和抽象,使得KMP算法进行模式匹配的原理显得不那么直白。本文希望能够原创 2012-04-01 17:38:02 · 573 阅读 · 0 评论 -
AC算法详解
AC算法是Alfred V.Aho(《编译原理》(龙书)的作者),和Margaret J.Corasick于1974年提出(与KMP算法同年)的一个经典的多模式匹配算法,可以保证对于给定的长度为n的文本,和模式集合P{p1,p2,...pm},在O(n)时间复杂度内,找到文本中的所有目标模式,而与模式集合的规模m无关。正如KMP算法在单模式匹配方面的突出贡献一样,AC算法对于多模式匹配算法后续的发原创 2012-04-01 17:41:26 · 3606 阅读 · 0 评论 -
BM算法详解
1977年,Robert S.Boyer和J Strother Moore提出了另一种在O(n)时间复杂度内,完成字符串匹配的算法,其在绝大多数场合的性能表现,比KMP算法还要出色,下面我们就来详细了解一下这一出色的单模式匹配算法,在此之前推荐读者读一下我的另一篇文章《KMP算法详解》,对于透彻理解BM算法大有裨益。在讲解Boyer-Moore算法之前,我们还是要提一提KMP算法的老例子,原创 2012-04-01 17:48:12 · 2133 阅读 · 1 评论 -
模式匹配之路
之前我的文章中,介绍了KMP,BM,AC,WM等几个经典的模式匹配算法,本文我将对常用的模式匹配算法做一小结。模式匹配算法的关系图如下所示:这里有几个我的文章中暂时没有涵盖的算法,这里做一简要说明。Rabin-Karp算法,这是一个基于散列值的模式匹配算法,根据散列算法,将长度为m的模式串计算一个散列值,然后对于目标串中各长度为m的子串分别计算散列值,与模式串的散列结果原创 2012-04-01 17:49:19 · 745 阅读 · 0 评论 -
pcap文件格式
Libpcap已经成为Linux,Unix平台上网络数据捕获的一个事实上的标准。所以,掌握Libpcap文件的格式也非常重要。这里用version2.4来说明(实际上,这个文件格式自从Libpcap的0.4版本,既是1998年来就没有改变过)。Libpcap文件用.pcap作为后缀。从上图可以看出来,每个Libpcap文件都有一个全局的头(Global header),然后跟着是N(N>=原创 2012-04-06 15:38:21 · 2060 阅读 · 0 评论 -
syslog(),openlog(),closelog()
这里面的三个函数openlog, syslog, closelog是一套系统日志写入接口。另外那个vsyslog和syslog功能一样,只是参数格式不同。 原理:通常,syslog守护进程读取三种格式的记录消息。此守护进程在启动时读一个配置文件。一般来说,其文件名为/etc/syslog.conf(注释:if you want to redirect log to other pl原创 2012-04-09 18:58:51 · 1671 阅读 · 0 评论 -
Libxml/tree.h:No such file or directory错误
1、在Xcode菜单 Project->Edit Project Settings的Build标签,搜索Header Search Path,添加/usr/include/libxml2即可。2、在linux里编译时,应该指定-I选项到你安装libxml2的include目录下的libxml2的目录中。 如我的是安装在/usr/local/目录下,我编译时-I/usr原创 2012-04-11 10:15:52 · 6510 阅读 · 0 评论 -
用C语言实现PHP的basename函数
#include #include #include /***********************************Author : DemonWebsite : http://demon.twE-mail : 380401911@qq.com***********************************//* {{{ php_basename */v转载 2012-04-11 19:59:29 · 1332 阅读 · 0 评论 -
pthread_mutex_init
头文件:#include 函数原型: int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr); pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 该函数用于C函数的多线程编程中,原创 2012-04-19 15:26:47 · 1316 阅读 · 0 评论 -
BM算法之二
首先,先简单说明一下有关BM算法的一些基本概念。 BM算法是一种精确字符串匹配算法(区别于模糊匹配)。 BM算法采用从右向左比较 的方法,同时应用到了两种启发式规则,即坏字符规则 和好后缀规则,来决定向右跳跃的距离。 BM算法的基本流程: 设文本串T,模式串为P。首先将T与P进行左对齐,然后进行从右向左比较 ,如下图所示: 若是某趟比较不匹配时,B原创 2012-04-20 17:09:30 · 578 阅读 · 0 评论 -
new和malloc的区别和联系
1、new 是c++中的操作符,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。4、new 和 mallo原创 2011-11-28 09:39:33 · 398 阅读 · 0 评论 -
浅谈快速排序算法
浅谈快速排序算法快速排序,正如它的名字所示,它是在实践中最快的已知排序算法,它的算法思想是从待排序记录序列中选取一个记录为枢纽元,其关键字设为K,然后将其余记录中关键字小于K的记录移到前面,而将关键字大于K的记录移到后面,结果将待排序记录分成两个部分(S1、S2),最后将关键子K的记录插入到其分界线位置,这个过程是一趟快速排序。通过一次划分后,就以关键字为K的记录为界,将待排序的序列分原创 2011-11-28 10:36:09 · 739 阅读 · 0 评论 -
__inline和宏定义
__inline关键字但使用KEIL4 ARM编译测试未过,验证了宏定义和内联函数的区别,自己总结宏定义和内联函数都不生成代码段,程序运行也没有参数压栈开销内联函数检查调用参数的合法性,也可以进行参数类型转换一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例:原创 2011-11-23 10:21:02 · 554 阅读 · 0 评论 -
跟我一起写Makefile:概述
概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的集成开发环境(integrated development environment, IDE)都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef原创 2011-07-28 12:34:43 · 456 阅读 · 0 评论 -
Compiling C
C 编程中相关文件后缀 .a静态库 (archive).cC源代码(需要编译预处理).hC源代码头文件.iC源代码(不需编译预处理).o对象文件.s汇编语言代码.so动态库单个源文件生成可执行程序 下面是一个简单的“hello, ubuntu”程序的源代码:/* helloubu原创 2011-07-28 17:18:55 · 367 阅读 · 0 评论 -
extern用法详解
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。1 基本解释extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也原创 2011-09-01 13:16:57 · 488 阅读 · 0 评论 -
Gcchowto
本文翻译自 An Introduction to GCC 的部分章节(有改动)。[编辑] 准备工作 注意:本文可能会让你失望,如果你有下列疑问的话:为什么要在终端输命令啊? GCC 是什么东西,怎么在菜单中找不到? GCC 不能有像 VC 那样的窗口吗?…… 那么你真正想要了解原创 2011-07-28 10:56:53 · 352 阅读 · 0 评论 -
创建多线程
//ThreadHelper.h/*--License(在这里设置版权或许可等信息)--自由无限制*//*\-Version(在这里记录版本等信息)--1.00--publish from http://www.loveunix.net(非正式发布)转载 2011-09-17 10:47:24 · 1138 阅读 · 1 评论 -
svn在linux下的使用(svn命令行)
1、将文件checkout到本地目录svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 简写:svn co2、往版本库中添加新的文件 sv原创 2011-08-31 13:02:59 · 352 阅读 · 0 评论 -
用gSOAP开发Web+Service程序
gSOAP是一个绑定SOAP/XML到C/C++语言的工具,使用它可以简单快速地开发出SOAP/XML的服务器端和客户端。由于gSOAP具有相当不错的兼容性,通过gSOAP,我们就可以调用由Java, .Net, Delhpi, PHP等语言开发的SOAP服务,或者向它们提供SO原创 2011-10-12 15:33:35 · 952 阅读 · 0 评论 -
gSOAP简单使用例子
一.系统环境linux操作系统kernel2.4.2,安装gsoap2.6到目录/usr/local/gsoap二.gSOAP的简要使用例子下面是一个简单的例子,实现一个加法运算的WebService,具体功能是cli端输入num1和num2,server端返回一个n原创 2011-10-12 19:48:00 · 3300 阅读 · 1 评论 -
gSOAP简单多线程服务器程序
一 gSOAP需要的头文件://gsoap ns service name: calc//gsoap ns service style: rpc//gsoap ns service encoding: encoded//gsoap ns service names原创 2011-10-12 19:49:07 · 3953 阅读 · 1 评论 -
gsoap开发webservice
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相原创 2011-10-12 20:14:42 · 810 阅读 · 0 评论 -
c++空类实例大小不是0原因收藏
初学者在学习面向对象的程序设计语言时,或多或少的都些疑问,我们写的代码与最终生编译成的代码却 大相径庭,我们并不知道编译器在后台做了什么工作.这些都是由于我们仅停留在语言层的原因,所谓语言层就是教会我们一些基本的语法法则,但不会告诉我们为什么这么做?今天和大家谈的一点感悟就是我在学习编程过程中的一点经验,是编译器这方面的一个具体功能.首先:我们要知道什么是类的实例化,所谓类的实例化就是在内原创 2011-10-21 16:51:38 · 432 阅读 · 0 评论 -
sync、fsync、fdatasync、fflush函数
传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满 或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写 (delayed write)(Ba原创 2012-07-05 19:35:26 · 3631 阅读 · 0 评论