自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 glibc中的正则表达式处理

(1) regexec是否线程安全?这个函数是glibc中的,至于他是否是线程安全,我先搜了一下,好像没有人说。对于这种库函数最好小心使用,摸清底细先。看来只能到libc中寻找答案了,实现代码如下:intregexec (preg, string, nmatch, pmatch, eflags)    const regex_t *__restrict preg;    const char *__restrict string;    size_t nmatch;    regmatch_t pmatch

2010-08-25 17:05:00 1855

原创 Mysql一个sql查询语句写法

<br />俺是菜鸟<br />A表存在一个id字段,B表也存在一个id字段<br />需要将A表中不存在,B表中存在的记录全部过滤出来<br />(1) select * from t_website_notemp where id not in(select id from t_website);<br /> <br />(2) select t_website_notemp.* from t_website_notemp left join t_website on t_website_notemp.

2010-07-29 11:41:00 595

原创 Linux下服务端程序性能优化

这个问题说起来可大可小,可长可短,基本都是自己切身的经验总结。 高爷爷说过"过早的优化是万恶之源",做开发不可能一开始就想着优化,应该从全局考量,从各个角度去思考,权衡利弊,做出一个 符合大局利益的设计,下来再考虑如何优化。 优化是在现有已成形的设计架构下,做的性能提升。假如你一开始就设计一个低性能的架构,满足不了需求,这种只能推到重来,还优化干嘛。 经验总结如下:

2010-05-18 18:16:00 780

原创 跨平台实现客户端流控

     流控的目的在于控制用户数据(很多模块,有JAVA, 有C++)到VPN真实流量。     其实这个很好实现,让所有模块都去申请流量即可控制。     但是问题的关键在于如何实现JAVA和C++的程序一起去流控?     还好JAVA提供了共享内存,但是是否和mmap的调用一致呢?需要写个程序验证一下C++:#include #include #include

2010-04-09 21:47:00 759

原创 Linux下通过iptables抓取tcp连接

1.1.1   iptables原理 1.1.2   以本地为源的包路径StepTableChainComment1  本地程序(比如,服务程序或客户程序)2  路由判断,要使用源地址,外出接口,还有其他一些信息

2009-11-30 20:44:00 1478

原创 Linux下劫持connect到指定IP地址

    3.1.1  Linux系统调用原理        每个系统调用都是通过一个单一的入口点多路传入内核。eax 寄存器用来标识应当调用的某个系统调用,这在 C 库中做了指定(来自用户空间应用程序的每个调用)。当加载了系统的 C 库调用索引和参数时,就会调用一个软件中断(0x80 中断),它将执行 system_call 函数(通过中断处理程序),这个函

2009-11-30 20:16:00 2738

原创 在C++函数中优雅的处理资源释放

在C++函数中优雅的处理资源释放       在审查代码的过程中发现如下代码:conf_t cdConf = conf_new();if (cdConf == NULL){       return -1;} if (conf_load(au.get(), CLUSTERD_CONF) == 0){       conf_delete(cdConf); 

2009-10-19 20:00:00 1269

原创 查表法优化简单加解密

xx服务中需要对IP包进行简单的加解密,以前有段时间也是用过简单加解密,通过测试发现占用了大量的时间, 如果能够提高其执行效率,那么对提升xx服务性能将有很好的帮助 oprfile测试结果:CPU: CPU with RTC device, speed 2800.22 MHz (estimated)Counted RTC_INTERRUPTS events (RTC int

2009-10-14 10:46:00 1013

原创 template method pattern 和一些C++惯用法

 Template method pattern是GOF24种设计模式中的一种即名”模板方法模式”,意图即为”定义一个算法的骨架, 将具体的算法实现延迟到子类中实现。”在M4.3多线路服务端的预研开发中,服务端主要实现一个连接代理转发数据的功能,但是连接的种类繁多。有多线路自身的命令隧道,数据传输隧道,应用层代理连接。每一种隧道的数据读取方式都是相同的,都是利用环形缓冲区空间去readv某

2009-09-24 20:48:00 789

原创 使用tcpdump更加精确的抓包

tcpdump 保存文件 -w *.cap -c ip包个数-e 打印数据链路层信息,可以查看数据包的MAC地址tcpdump中的协议关键字:(1) 过滤ip包长度tcpdump -i eth0 -n -vv icmp and ip[2:2] > 100(2) 过滤相关的tcp类型包tcp类型包包括: URG(带外数据)ACK(应答包)PSH(PSH传送)RST(重置包)SYN(握手包)F

2009-09-09 10:21:00 4932

原创 C++ vtable相关

(1) vtable的影响     导致一个对象实例增大4个字节 #include  #include  using namespace std; class A {        int a; }; class B {        virtual void say()        {        }              int b; }; int main(i

2009-08-23 23:00:00 684

原创 malloc, free, new , delete

 (1) free  连续free2次同一指针,如果程序没有崩溃,只能说明你的rp值还行。至于何时崩溃就不知道了。最好设置环境变量MALLOC_CHECK_进行检查,参照man手册中的说明:MALLOC_CHECK_=0, 和没设置一样,将忽略这些错误                     MALLOC_CHECK_=1,  将打印一个错误告警                  

2009-07-27 16:59:00 1234

原创 单例

以下观点都不是绝对的,都是相对的,谢谢 (1)    全局变量的缺点a.       可扩展性较差b.       维护性较差,在大型工程中可能存在多人同时开发,谁对全局变量进行了什么操作,无从得知(2)    何为单例模式?单例模式是24种设计模式中比较常用的一种,顾名思义就是保证某个类的实例只有一个。 (3)    单例模式实现的问题一般来说单例模式的实现存

2009-07-06 20:13:00 652

原创 网络错误

10055  ---  队列已满或者缓冲区空间不足, 以前只所以出现这种问题,就在于收到10060后,继续send。 修改办法就是sleep一段时间或者轮询不断的send.       主要还是connect或者send过于频繁,导致系统资源耗尽。 10048  --- 本地没有可以使用的端口,最大的可能是1-65535大部分端口都处于time_wait状态,该状态出现在ip测试工具测

2009-05-31 13:34:00 841

原创 Bash命令小技巧总结

Bash不是天天在用,偶尔用一下查下又忘了,所以记下来(1) grep -x 完全匹配一行-c 打印匹配的行数,有几行-n 匹配到行前打印在第几行-l 打印匹配到的文件名-L 打印没有匹配到的文件名(2) 取第一个和最后一个head -n tail -n(3) cut命令取文本的第几列cut -d: -f 1 src-f 表示第几个域,-d表示分

2009-05-03 21:24:00 983

原创 搭建广域网模拟器nistnet.2.0.12步骤

纯属个人经验, 只供参考, 如有不当,敬请指正 搭建广域网模拟器nistnet.2.0.12步骤 1. 下载nistnet:nistnet有b(2.4.xx以下版本) 和 c(2.6.xx)版本, 我们目前使用的都是2.4.20或者2.4.32内核, 所以用b版本              2. 根据nistnet要求编译内核, (可以试试直接安装是否可以,如果能直接安装最

2008-11-26 20:57:00 2455 1

原创 打印某个进程的执行栈

现成的方法有pstack或者使用gdb -p,一般用于查找进程堵塞或者CPU占用过高时的堆栈。 基本原理是通过ptrace到某个进程获取其寄存器的BP值,依次推导出整个执行栈 #include #include #include #include #include #include #include #include #include #include #include #inc

2008-10-28 20:05:00 847

原创 内存管理checklist

(1) 栈上变量必须初始化(2) 从堆上分配的内存必须初始化 (3) 栈上局部变量是否有大数组变量,导致栈超出默认限制溢出 (4) 栈中是否有不合理的递归,导致栈超出默认限制溢出 (5) 必须对内存耗尽的情况进行处理. 注意new在内存不足时的处理方式(6) 释放某个指针后,必须将该指针变量赋值为NULL, 避免野指针的出现(7) 禁止对同一指针delete或者free两次

2008-08-28 19:26:00 524

原创 epoll vs poll

测试目的:             证明epoll和poll在应用层相同的使用条件下,epoll的开销要明显的小于poll                                                     Epoll采用ET模式测试方法:服务端,对连接过来的n个客户端只读取数据,系统调用只有poll和read, 或者epoll_wait和read, 便于分析。为了poll

2008-08-25 15:56:00 1049

原创 网络开发的一些总结

(1) I/O 模型的选择, epoll就一定好吗?  那是肯定的。epoll最有用的就是ET模式,适合于那种有大量连接,但是有数据的连接比较少的情况, 如果你有10000个连接,但是很不幸,这10000个连接全部都有数据,你还是得遍历一把进行处理,( 这里对ET模式下怎么处理数据就不讨论了)。这个和select, poll有什么区别。epoll还有比select, poll先进得

2008-07-18 16:39:00 839

原创 基于有序数据的一些接口,比如二分查找,二分查找某个范围的集合

typedef int (*COMPAREFUNC) (void* pData, void* pValue); /** * 在一个有序容器中采用二分法查找一个元素的插入位置  * @param1 ppArray, 指针数组起始地址指针  * @param2 count,  指针数组已含有的元素数量 * @param3 comparefunc,  元素之间的比较函数 * @param4 pV

2008-07-14 19:20:00 533

原创 环形消息队列的实现

struct MessageQueue{ int* m_pArray; //消息队列长度 int m_iLength; //消息队列的读下标 int m_iRead; //消息队列的写下标 int m_iWrite; //多个写操作时的互斥锁 pthread_mutex_t m_mutex; //该消息队列的条件变量 pthread_cond_t m_cond;};Mess

2008-07-14 19:13:00 1190

原创 环形数据缓冲的实现

关键在于写指针不能追上读指针,让读指针和写指针保留一个字节的距离来区分2个指针重叠的情况。如何保证线程安全的?其实就是某个线程在读取或者写入的时候取的某个时间点的指针来判断时候符合条件,条件只能是越来越好,而不可能是越来越差。比如判断能够写入的时候,空间肯定是越来越多的  //实际的缓冲区大小要多一个字节struct RingBuffer{ //缓冲区头指针       cha

2008-07-14 19:07:00 925

原创 Linux下pthread开发的一些问题

(1) 线程也是资源,注意使用pthread_join和pthread_detach回收内存(2) mutex会将等待加锁的线程形成一个队列,spinlock会不断的查询锁,类似于nonblock的处理(3) pthread_cond_wait后,将会释放掉锁,供另外一个线程操作,操作完才会用pthread_cond_sign唤醒, pthread_cond_wait必须要和mutex一起

2008-07-14 17:52:00 1563

原创 深入理解shutdown和close函数

shutdown可以半关闭读和写端,关闭读端,告诉内核不再接收数据,统统扔掉关闭写端,只发送一个关闭握手,即一个FIN。shutdown只能关闭写,或者读,fd的关闭还必需要close来完成, 否则fd会一致增长close关闭fd的时候,如果该fd有计数,那么要等计数为0后才能发送关闭握手包 单进程多线程处理fd的时候,需要自己构造fd计数器来实现fd的关闭

2008-05-21 16:26:00 1016

原创 fd最大值和限制

fd的数量决定了fd的最大值 在Linux下,系统全部能够打开的fd总数为:/proc/sys/fs/file-max,取决于内存The file-max file /proc/sys/fs/file-max sets the maximum number of file-handles that the Linux kernel will allocate. We general

2008-05-08 14:43:00 16128

原创 sed的注意事项

(1) sed默认不保存修改的文件,需要添加-i参数(2) 如果需要使用shell中的变量要用" "替代单引号, 这个时候有可能引用的变量不被解释,需要使用 /屏蔽其特殊含义 例子:sed -i "1 a//${PATH}" 123.txt

2008-04-21 17:50:00 684

原创 select, poll, epoll的选择

select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费2.1024上限问

2008-02-25 22:55:00 9255

原创 Thread类封装

class CThread : public CObject{ public:   CThread();      virtual ~CThread();      void start();      void join();   void detach();   pthread_t getThreadId() const   {    return m_threadId;   }   

2008-02-18 18:43:00 1184

原创 鄙视select, 然后鄙视自己

首先,先鄙视一下自己,再强烈鄙视一下select 也许大家都知道select有一个FD_SETSIZE 1024的限制,在UNP 第一卷139页(第二版)有这么一句话:                                             “头文件中定义的FD_SETSIZE常值是数据类型fd_set中的描述字总数,其值通常是1024。不过..." 反正我

2008-01-13 13:55:00 608

原创 面向接口的网络处理模型(封装select, epoll, poll)

天上午很不幸碰到一个select的问题,幸好以前对网络I/O处理的模块进行了封装,今天下午很快就完成了一个基于poll的I/O处理封装, 只需要进行1行代码的替换,就可以轻松从select架构转换到poll,同理也可以转换到epoll。 自己可以随心所欲的切换网络I/O处理架构!!!  这里是接口,使用的是模板,这里没有使用C++的继承,有如下几点考虑: (1) 效

2008-01-13 13:53:00 2560 2

原创 依赖反转,异常,auto_ptr,多态,STL容器,虚构造函数

(1) 栈上变量必须初始化(2) 从堆上分配的内存必须初始化 (3) 栈上局部变量是否有大数组变量,导致栈超出默认限制溢出 (4) 栈中是否有不合理的递归,导致栈超出默认限制溢出 (5) 必须对内存耗尽的情况进行处理(6) 释放某个指针后,必须将该指针变量赋值为NULL, 避免野指针的出现(7) 禁止对同一指针delete或者free两次或以上(8) 对数组操作,必须强

2007-09-21 00:51:00 778

原创 C++和Java区别

 (1)      Java有垃圾回收机制,当然也就没有C++的析构函数。但是,可控制性和C++相比就差了一点,而且也不是说有了垃圾回收,就不会产生内存泄漏。由于相互引用等原因可能造成对象的生存周期过长,垃圾回收失效。对象内存的回收,个人认为应该是由程序员来掌握的事情。C++可以用auto_ptr,shared_ptr等智能指针来完成自动析构,当然前提是你要熟悉他们的实现机制和应用场合(2

2007-03-08 00:48:00 2112 2

nistnet广域网模拟器搭建步骤

广域网模拟器搭建,我没积分了,没办法, 实在没办法

2009-08-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除