C/C++
AAA20090987
一个喜欢编程,喜欢C 的人
展开
-
redis网络事件框架的使用
redis封装了一个小型网络库供自己使用,这个网络库只有几百行代码,却基本实现了一个高效的异步网络事件框架,而且与其他redis模块相对独立,故我将其独立出来,方便以后复用。与著名的libevent相比,它代码精简,只实现了最基本的功能,而且没有用上什么高深的技术,十分适合我们学习和借鉴。 以下这个程序实现了一个简单的回显服务器,并且每秒钟在控制台输出一句话。它简单地演示了redis网络模块的使用。 这个程序由6个源文件组成,ae.h, ae.c, ae_epoll.c, anet.h, anet.c原创 2013-11-25 17:33:21 · 3092 阅读 · 7 评论 -
nginx队列模块的分析和使用
nginx队列模块的设计挺精妙的,也算是用一个C语言实现泛型编译的典型例子了,我将其独立出来,写上注释和测试例子,方便以后查看。原创 2013-12-16 15:14:01 · 2221 阅读 · 0 评论 -
Eclipse快捷键 10个最有用的快捷键
Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个转载 2014-01-21 14:06:39 · 820 阅读 · 0 评论 -
某高人实现的红黑树模板类
某高人实现的红黑树模板类原创 2013-12-26 11:47:32 · 2276 阅读 · 0 评论 -
Linux中C语言open函数打开或创建文件详细讲解
头文件:#include #include #include 函数原型:int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode);作用:以各种方式打开文件返回值:返回打开的文件句柄,-1 打开失败函数说明 参数pa转载 2013-08-28 13:53:06 · 10336 阅读 · 0 评论 -
Winsock入门编程示例代码
Winsock入门,socket编程,网络 客户端代码:[cpp] view plaincopy#include #include #include #pragma comment(lib,"Ws2_32.lib") #define BUFFER_SIZE 50 /*客户端代码转载 2013-07-22 09:37:48 · 2316 阅读 · 0 评论 -
LINUX C语言:程序运行时动态加载库函数
PS:相关知识请自己去看man手册,这里只给出一个实例,及创建这个实例的步骤。1:创建test.h, test.c文件//test.h#ifndef TEST_H_#define TEST_H_#include void PrintHello();int Add(int a, int b);#endif//test.cpp#include "test.h原创 2013-02-02 11:12:46 · 4753 阅读 · 0 评论 -
glog功能介绍
本文是根据自己的理解翻译组织了glog的manual,鉴于自身的理解能力和英语水平,可能存在谬误,欢迎大家指出!英文原文见http://google-glog.googlecode.com/svn/trunk/doc/glog.html 1. 概述 Google glog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例:转载 2013-07-06 16:26:20 · 1614 阅读 · 0 评论 -
一个字符串替换算法
功能:将一段字符串中特定的子字符串替换成指定字符串数组中的的字符串详情请见程序中的注释。#include #include #include using namespace std;/*功能:将一段字符串中特定的子字符串替换成指定字符串数组中的的字符串content:原来的字符串(原文)repStr:原文中要被替换成新字符串的旧字符串(关键字)vec:替换旧字符串的新原创 2013-03-31 22:31:17 · 2887 阅读 · 0 评论 -
windows下开发PHP扩展(无需Cygwin)
第一步:准备1、php源码包和windows下的二进制包,以及安装Visual C++,并把Microsoft Visual Studio/Common/MSDev98/Bin的绝对路径添加到windows环境变量2、解压源码包到d:/php_src3、进入d:/php_src/ext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为“linvo”转载 2013-05-29 15:33:22 · 1211 阅读 · 0 评论 -
C++分割字符串
#include #include #include using namespace std;/*功能:字符串分割返回值: 分割后的字符串数组参数:str:原字符串pattern:分隔符*/vector split(const string &str, const string &pattern){ int current, pos, patlen; vector r原创 2013-05-22 10:57:40 · 1188 阅读 · 0 评论 -
用Doxygen+Graphviz生成函数调用流程图
上面这张图是用Doxygen+Graphviz从netcat的源代码生成的函数调用关系图。这种图有助于阅读源代码。还可以生成class(或者struct)之间的关系图,如下所示: 现在介绍如何使用Doxygen和Graphviz生成这种图:1. 下载并安装Doxygen和Graphviz。直接Google就可以找到主页,下载安装即可。2. 记住Gra转载 2013-04-19 21:15:17 · 2908 阅读 · 1 评论 -
libpcap使用
libpcap使用libpcap是一个网络数据包捕获函数库,功能非常强大,Linux下著名的tcpdump就是以它为基础的。今天我们利用它来完成一个我们自己的网络嗅探器(sniffer)首先先介绍一下本次实验的环境:Ubuntu 11.04,IP:192.168.1.1,广播地址:192.168.1.255,子网掩码:255.255.255.0可以使用下转载 2013-04-25 16:48:51 · 1596 阅读 · 0 评论 -
C++:在程序中获取全球唯一标识号(GUID或UUID)
Windows:使用CoCreateGuid函数(GUID)#include #include #define GUID_LEN 64int main(int argc, char* argv[]){ char buffer[GUID_LEN] = { 0 }; GUID guid; if ( CoCreateGuid(&guid) ) { fprintf(stderr,原创 2013-02-01 15:49:49 · 11485 阅读 · 1 评论 -
linux更改执行进程名称
前几天网上搜索如何更改执行进程的进程名称,并没有得到一个好的答案.刚刚阅读nginx的源码,发现这样一种解决方案,记录之:网上说的比较多的是直接更改argv[0],但是如上图中所示,nginx中指出,必须将argv[1]置为NULL才行,而且要注意,系统给argv[0]提供的空间可能不足以存储你所要求的新title,解决方案是重新给环境变量申请内存区域,然后将环境变量复制过去(en转载 2014-01-24 12:45:17 · 1871 阅读 · 1 评论 -
C语言判断文件夹或者文件是否存在的方法
C语言判断文件夹或者文件是否存在的方法方法一:access函数判断文件夹或者文件是否存在函数原型: int access(const char *filename, int mode);所属头文件:#include filename:可以填写文件夹路径或者文件路径mode:0 (F_OK) 只判断是否存在 2 (R_OK) 判断写转载 2014-03-31 18:04:56 · 1364 阅读 · 0 评论 -
编译原理:tiny语言
描述真实的编译器非常困难。“真正的”编译器——也就是希望在每天编程中用到的——内容太复杂而且不易在本教材中掌握。另一方面,一种很小的语言(其列表包括1 0页左右的文本)的编译也不可能准确地描述出“真正的”编译器所需的所有特征。为了解决上述问题,人们在( A N S I)C中为小型语言提供了完整的源代码,一旦能明白这种技术,就能够很容易地理解这种小型语言的编译器了。这种语言称作T I N Y原创 2015-01-24 16:01:01 · 6532 阅读 · 0 评论 -
C++ string,删除字符串中的首尾空格
直接上代码: void EraseSpace(string &s) { //ch可换成其他字符 const char ch = ' '; s.erase(s.find_last_not_of(" ") + 1); s.erase(0, s.find_first_not_of(" ")); }够简单吧,亏我以前还一个字符一个字符地数空原创 2015-01-23 17:05:03 · 6781 阅读 · 3 评论 -
编写leetcode测试用例时所用的辅助函数
在做leetcode题目(https://oj.leetcode.com/problemset/algorithms/)的时候,我们总要自己写测试用例,常常要生成vector, list, tree,我将这些常用操作封装了一下,方便大家使用原创 2015-01-31 17:10:31 · 8986 阅读 · 2 评论 -
站在巨人的肩膀上,C++开源库大全
程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。Standard Template Library:标准模板库C POSIX library : POSIX系统转载 2014-10-28 19:13:21 · 1571 阅读 · 1 评论 -
Visual Studio 调试小技巧(1)-根据字符串内容添加断点
在用Visual Studio调试程序时,我们经常需要根据数值添加断点。比如需要当i == 2时中断运行,我们可以添加如下的断点: 有些时候,我们需要根据字符串的内容来添加断点。比如我们在调试如下代码:void CVSDebugTricksDlg::OnBnClickedButton1(){ char* string; for(int i = 0; i转载 2014-10-23 11:41:07 · 1316 阅读 · 0 评论 -
用openssl进行rsa的加密与解密(linux,C++版)
初学openssl库,写了一例子,记录一下。原创 2014-02-17 11:34:27 · 15060 阅读 · 0 评论 -
代码格式调整(去掉行号),C++实现
有时候在网上看到一段优秀的代码,心动之余立即用Ctrl+C,Ctrl+V把它拷下来运行一下先,结果却发现该网站不厚道,连每行之前的行号也一同复制下来了,手动删除这些行号实在太麻烦,只好写一个小程序,来删除这些行号了。上代码://先创建in.txt, out.txt这两个文件//然后把要调整的代码放入in.txt中,运行这个程序,//那么,out.txt中的程序就是我们想要的原创 2012-04-05 21:17:55 · 3788 阅读 · 1 评论 -
MFC、WTL、WPF、wxWidgets、Qt、GTK的对比
WTL都算不上什么Framework,就是利用泛型特性对Win API做了层封装,设计思路也没摆脱MFC的影响,实际上用泛型做UI Framework也只能算是一次行为艺术,这个思路下继续发展就会变得没法用了,比如 代码过于复杂,编译太慢,出错不好调试等问题难以解决。而且封装得也不完全,还是随处可见 HWND HDC之类的东西。用途主要是写一些很小的程序,或者作为其他UI框架的后端实现转载 2014-07-26 09:39:03 · 5168 阅读 · 0 评论 -
C语言操作MYSQL小例子
初学使用用C语言操作MYSQL,写了个小例子,帖上来献丢人一下,呵呵。 程序很简单,先连接数据库,然后向class1表中插入一条数据,最后获取并输出整个class1表的内容。上代码://test.c//gcc test.c -o test -lmysqlclient#include #include #include //发生错误时,输出错误信息,关闭连原创 2012-11-13 22:35:52 · 6852 阅读 · 1 评论 -
mysql_control:我自己封装的微型MYSQL操作库
简介:MYSQL的原生C语言API用起来有点麻烦(特别是在要获取查询结果的时候),所以我对其做了一个简单的封装,让它更易于使用。头文件:mysql_control.h#ifndef MYSQL_CONTROL#define MYSQL_CONTROL#include #include #include #include #include #include u原创 2012-11-15 22:52:09 · 1470 阅读 · 1 评论 -
推荐一款cpp解析json工具--rapidjson
项目地址:http://code.google.com/p/rapidjson/上面有很详细的介绍:http://code.google.com/p/rapidjson/wiki/UserGuide作者介绍说:" Rapidjsonis an attempt to create the fastest JSON parser and generator. "这是一个试图转载 2014-05-15 14:42:36 · 1274 阅读 · 0 评论 -
拥有线程安全和阻塞功能的vector类SemVector(LINUX平台)
这是我自己写的一个拥有线程安全和阻塞功能的vector类SemVector(LINUX平台),欢迎大家使用//semvector.h#ifndef SEMVECTOR_H_#define SEMVECTOR_H_#include #include #include #include templateclass SemVector{private: T *m_Arr原创 2013-03-06 16:22:53 · 1812 阅读 · 0 评论 -
libcurl之curl_easy_getinfo的使用教程
执行结果代码[cpp] view plaincopy// getinfo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; #include "curl/curl转载 2014-03-21 15:36:30 · 4182 阅读 · 0 评论 -
使用zlib实现gzip格式数据的压缩和解压
代码简介本身这段代码也是从网络上找来的,但是网上的内容都没有针对gzip做特别说明,所以直接拿来用的时候出了些问题,现将我修改后的发在这里。注意代码中的注释部分,这里设置是专门针对gzip的,缺少了就不行了,gzip压缩格式和其他格式的区别就在这里。Bytef 就是 unsigned char,uLong就是 unsigned long,这些别名的设置都在zconf.h文件里面。转载 2014-04-16 13:50:20 · 2498 阅读 · 1 评论 -
深入浅出C/C++中的正则表达式库(一)——GNU Regex Library
正则表达式(Regular Expressions),又被称为regex或regexp,是一种十分简便、灵活的文本处理工具。它可以用来精确地找出某文本中匹配某种指定规则的内容。在linux下,grep, sed, awk等工具都支持正则表达式,这些工具的存在,为我们日常的文本处理带来了极大的便利。但是,有时候,我们自己写的程序中也需要用到正则表达式来处理一些文本,这时候就需要一些正则表达式库的支持转载 2013-01-25 15:06:21 · 1764 阅读 · 0 评论 -
libcurl的简单使用
curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。看一个简单的例子:#include #include #include CURL *curl;CURLcode res;size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream){ if (strle转载 2013-01-26 11:12:31 · 1761 阅读 · 0 评论 -
可以继承的C++ Singleton基类
单例模式(Singleton Pattern)是设计模式中的一种,它用来保证系统中最多只能存在一个它的实例,其做法是由类自身来创建和持有它的对象实例,把对实例的创建权和管理权都控制在自己手中,以便控制实例数目。关于如何在C++中实现单例模式的讨论已经太多了,我只是简单介绍一下可以继承的单例类。首先介绍一下通常所见的单例类的写法,不妨设这个类叫做Singleton。Sin转载 2012-05-19 10:23:51 · 3175 阅读 · 0 评论 -
初学函数指针,写个小例子来纪念一下
最近在学习函数指针(说来惭愧,用C/C++这么久,竟然还没用过函数指针),就写个小例子来记念一下吧,呵呵。PS:网上介绍函数指针的文章有很多,但大部分都是原理说了一大堆,但读很头晕晕的,结果函数指针到底怎么用还是不知道,汗。。。例子很简单,就不多作解释了:#include //最简单的回调函数,无参数和返回值void Test1(){ printf("Test1\n");原创 2012-04-17 22:28:53 · 1341 阅读 · 0 评论 -
函数指针的几种用法
什么是函数指针?函数指针指向的是特殊的数据类型,函数的类型是由其返回的数据类型和其参数列表共同决定的,而函数的名称则不是其类型的一部分。 一个具体函数的名字,如果后面不跟调用符号(即括号),则该名字就是该函数的指针(注意:大部分情况下,可以这么认为,但这种说法并不很严格)。 函数指针的声明方法// 定义函数指针pfint (*pf)(cons转载 2012-04-09 22:40:38 · 1390 阅读 · 0 评论 -
C语言中volatile关键字的作用
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的转载 2012-04-07 21:12:15 · 808 阅读 · 0 评论 -
C++构造函数调用顺序
C++构造函数调用顺序: 1.虚基类的构造函数;虚基类构造函数如果有多个,虚基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序; 2、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);基类构造函数如果有多个,基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序; 3、如果类里面有成员转载 2012-03-19 22:06:12 · 1301 阅读 · 0 评论 -
如何在C#中直接操作C++结构体
在C#中调用C++或系统DLL是比较常见的操作。 例如C++中定义的以下结构体: struct RCEStruct { int Event; int Flag; char User[40]; }; 同时有一个公开方法: extern "C" __declspec WORD CALLBACK GetStruct(RCEStr转载 2012-03-07 10:49:46 · 1725 阅读 · 0 评论 -
正则表达式资源
RT,我自己也是新手,也正在学,如果大家有更好的资源也共享一下。这个是大家最熟悉的RegExLab:http://www.regexlab.com/zh/regref.htm正则表达式30分钟入门教程: http://manual.phpv.net/regular_expression.html脚本之家:http://www.jb51.net/list/list_6_1转载 2012-03-04 21:07:39 · 880 阅读 · 0 评论 -
学习C++:实践者的方法
前言我的blog以前很长一段时间关注的都是C++中的技术&细节,乃至于读者和应者都寥寥。然而5月份的时候写的一篇“你应当如何学习C++”,阅读量却达到了3万多,在blog上所有文章中却是最高的(且远远超过了第二位);评论数目也有一百多。为什么独独这篇能够激起这么多的回应,想必是国内的C++社群被C++压抑太久,或者,严格来说,是被C++的教育方式压抑太久。实际上,不管是在各大国内论坛上,还转载 2012-01-16 13:51:49 · 887 阅读 · 0 评论