2014年1月21日
摘要:
(0)从http://gnuwin32.sourceforge.net/packages/pcre.htm (pcre windows)下下载最新的windows平台源代码pcre-7.0-src.zip,不要选择开发包以及bin文件,由于编译器(bcc以及交叉编译器)的差异,会导致这些不同后缀名得库用不了,浪费时间。(1) Copy or rename the file config.h.in asconfig.h, and change the macros thatdefine HAVE_STRERROR and HAVE_MEMMOVE to definethem as 1 rathe
阅读全文
posted @ 2014-01-21 14:14
单车博客园
阅读(516)
推荐(0)
摘要:
Linux平台上被广泛使用的正则表达式库PCRE - Perl-compatible regular expressions,从其名字即可知道,PCRE提供的是一套与Perl中相兼容的正则表达式。元字符(Meta-character)'\' : 在任何元字符前面加上反斜线,就会使它失去元字符的特殊作用。例如/3\.1415/这个模式里没有通配符'^' : 匹配行首;在字符集中它是脱字符,表示求补集'$' : 匹配行尾(或结尾处新行之前字符)'.' : 除新行(newline)外的任一字符('/s'选项将使'
阅读全文
posted @ 2014-01-21 11:09
单车博客园
阅读(4646)
推荐(0)
2014年1月20日
摘要:
在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址。(一)主要的步骤:在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取struct in_pktinfo(struct in_pktinfo是struct msghdr中msg_control的成员).in_pktinfo结构体(如下所示),我们可以从in_pktinfo中获取路由目的地址(destination address of the packet)、头标识目的地址(source address of the packet)。这种方法只能用于UDP(数据报)传输
阅读全文
posted @ 2014-01-20 15:22
单车博客园
阅读(1072)
推荐(0)
摘要:
struct sockaddr addr;struct sockaddr_in* addr_v4;int addr_len = sizeof(addr);//获取local ip and portZeroMemory(&addr, sizeof(addr));if (0 == getsockname(s, &addr, &addr_len)){if (addr.sa_family == AF_INET){ addr_v4 = (sockaddr_in*)&addr; cMonitorInf.nSourceIP = addr_v4->sin_addr.S_u
阅读全文
posted @ 2014-01-20 13:37
单车博客园
阅读(2067)
推荐(0)
摘要:
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数:htonl()--"Host to Network Long int"32Bytes ntohl()--"Network to Host Long int"32Bytes htons()--"Host to Network Short int" 16Bytes ntohs()--"Network to Host Short in
阅读全文
posted @ 2014-01-20 12:08
单车博客园
阅读(653)
推荐(0)
2014年1月17日
摘要:
使用select函数可以以非阻塞的方式和多个socket通信。程序只是演示select函数的使用,功能非常简单,即使某个连接关闭以后也不会修改当前连接数,连接数达到最大值后会终止程序。1. 程序使用了一个数组fd_A,通信开始后把需要通信的多个socket描述符都放入此数组。2. 首先生成一个叫sock_fd的socket描述符,用于监听端口。3. 将sock_fd和数组fd_A中不为0的描述符放入select将检查的集合fdsr。4. 处理fdsr中可以接收数据的连接。如果是sock_fd,表明有新连接加入,将新加入连接的socket描述符放置到fd_A。#include #include
阅读全文
posted @ 2014-01-17 10:33
单车博客园
阅读(255)
推荐(0)
2014年1月15日
摘要:
struct MyStruct{double dda1;char dda;int type};对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你会这样求:sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13但是当在VC中测试上面结构的大小时,你会发现sizeof(MyStruct)为16。你知道为什么在VC中会得出这样一个结果吗?其实,这是VC对变量存储的一个特殊处理。为了提高CPU的存储速度,VC对一些变量的起始地址做了“对齐”处理。在默认情况下,VC规定各成员变量存放的起
阅读全文
posted @ 2014-01-15 17:25
单车博客园
阅读(270)
推荐(0)
摘要:
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,常见的是重新排序读写指令。对常规内存进行优化的时候,这些优化是透明的,而且效率很好。由编译器优化或者硬件重新排序引起的问题的解决办法是在从硬件(或
阅读全文
posted @ 2014-01-15 10:32
单车博客园
阅读(207)
推荐(0)
2014年1月13日
摘要:
本文内容框架:§1 Boyer-Moore算法§2 Horspool算法§3 Sunday算法§4 KMP算算法§5 KR算法§6 AC自动机§7 小结§1 Boyer-Moore(BM)算法Boyer-Moore算法原理Boyer-Moore算法是一种基于后缀匹配的模式串匹配算法,后缀匹配就是模式串从右到左开始比较,但模式串的移动还是从左到右的。字符串匹配的关键就是模式串的如何移动才是最高效的,Boyer-Moore为了做到这点定义了两个规则:坏字符规则和好后缀规则,下面图解给出定义:下面分别针对利用坏字符规则和
阅读全文
posted @ 2014-01-13 13:57
单车博客园
阅读(3090)
推荐(0)
2014年1月9日
摘要:
散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。比如我们存储70个元素,但我们可能为这70个元素申请了100个元素的空间。70/100=0.7,这个数字称为负载因子。我们之所以这样做,也是为了“快速存取”的目的。我们基于一种结果尽可能随机平均分布的固定
阅读全文
posted @ 2014-01-09 15:27
单车博客园
阅读(365)
推荐(0)