C/C++
yanook
把握生命里的每一分钟,全力以赴心中的梦!
展开
-
地址强制转换
struct Test{ int Num; char *pcName; short sDate; char cha[2]; short sBa[4];}*p; 假设p的值为0x100000.如下表达式的值为多少:p+0x1=0x_?(unsigned long)p+0x1=0x_?(unsigned int*)p+0x1=0x_?p+0x1的值为 0转载 2012-01-16 15:01:07 · 980 阅读 · 0 评论 -
JSON and C++
JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org,本文不再对json做介绍,将重点介绍c++的json解析库的使用方法。json官网上列出了各种语言对应的json解析库,作者仅介绍自己使用过的两种C++的json解析库:jsoncpp(v0.5.0)和Boost(v1.34.0)。 一.转载 2012-11-12 21:05:10 · 403 阅读 · 0 评论 -
execve函数
execve函数将执行一个程序¨程序的名字地址作为第一个参数¨一个内容为该程序的argv[i](argv[n-1]=0)的指针数组作为第二个参数¨(char*) 0作为第三个参数#include void main() { char *name[2]; name[0] = "/bin/sh"; name[1转载 2012-11-17 22:38:48 · 473 阅读 · 0 评论 -
extern、头文件、源文件与编译和链接
extern、头文件、源文件与编译和链接关键字:extern 、头文件、源文件编译、全局变量的定义谈到extern(这里只谈论同一语言编译情况下的extern,不考虑C++与C混合编译情况下的extern,因为extern在这两种情况下的功能是不同的)与头文件,不得不谈编译与链接。extern的作用与头文件基本等同,都是为编译器服务的。但头文件使用更方便一些。尤其是在做一个转载 2012-12-26 23:09:19 · 408 阅读 · 0 评论 -
Gearman 分布式任务调度
Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,Gearman更偏向于任务分发功能。它的 任务分布非常 简单,简单得可以只需要用脚本即可完成。Gearman最初用于LiveJournal的图片resize功能,由于图片resize需要消耗大量计算资 源,因此需要调度到后端多台服务器执行,完成任务之后返回前端再呈现到界面。Gearman 分布式任务实现原理上只用转载 2013-01-15 22:26:44 · 1555 阅读 · 0 评论 -
Linux 共享库编程
1、介绍 动态库是程序设计常用的技术,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。在Windows和Linux操作系统中都有动态库的概念。Windows将其称为动态链接库(Dynamic Link Library,DLL),其文件扩展名为.dll,Linux称其为共享库技术(Shared Library),相应的共享库文件扩展名为.so转载 2013-04-29 10:27:53 · 246 阅读 · 0 评论 -
静态调用和动态调用动态库区别
为什么要设计出来两种调用方式?静态不是很好吗?直接就调用了。动态还要dlopen dlclose一系列额外的动作。---------------------------------------------------------------------------------------------------------随便举个例子,我将不同语言的资源封装在dll中,有转载 2013-04-29 10:11:27 · 463 阅读 · 0 评论 -
解析url地址字串,获得请求参数
解析url地址字串,获得请求参数在项目中出现了要解析url地址字符串并获得请求的参数,故,写了这段小代码 后注: 现在发现这个工具类还挺好用的,尤其在一些测试里,可以简单的模仿HttpServletRequest了 解析类 Java代码 /** * CopyRight (C) 2008-2009 yeyong */ package转载 2013-05-04 09:05:25 · 562 阅读 · 0 评论 -
Rsync 实现原理
Rsync 实现原理前言关于rsync的原始文档 Rsync technical report 以及Andrew Tridgell的论文 Phd thesis (pdf) 都是关于rsync算法原理的极好的文档。但是,这些文档注重的是rsync算法本身,而对算 法的实现方法则描述较少。本文试图对Linux/Unix下的rsync工具的实现进行分析,并将描述下列问题:转载 2013-08-31 08:16:46 · 796 阅读 · 0 评论 -
前置声明的使用
前置声明的使用有一定C++开发经验的朋友可能会遇到这样的场景:两个类A与B是强耦合关系,类A要引用B的对象,类B也要引用类A的对象。好的,不难,我的第一直觉让我写出这样的代码:[cpp] view plaincopy// A.h #include "B.h" class A { B b; public: A(void); virtual ~A转载 2012-11-25 13:52:30 · 341 阅读 · 0 评论 -
函数指针强制类型转换
C语言中的强制类型转换是一个很常用的技巧,在编程中经常会用到。形式简单的类型转换一目了然,然而复杂一些的却常常令人困惑。这两天读代码发现一个函数指针的类型转换:((void (*)(void)) (entry ))();虽然知道是通过函数指针进行函数调用,但是和见过的函数指针的形式都不一样,想了半天也不明白,最后到网上搜了一下,才知道是一个类型转换。函数指针的声明形式:void (转载 2012-11-03 23:31:39 · 1018 阅读 · 0 评论 -
结构体中指针初始化
今天来讨论一下C中的内存管理。 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以前做二叉树算法时,他的左右孩子指针使用时难道有初始化吗 那时我不知怎么的想不出理由,虽然我还是坚信要初始化的 过了几天这位同事说他试了一下,结构体中的成员指针不经过初始化是可以用(左子树和右子树转载 2012-09-02 22:31:58 · 2676 阅读 · 1 评论 -
C语言宏函数
#include #define ICALL(x) if((err=x())int test();int main(){ int err=0; ICALL(test); out: printf("the result is out\n"); printf("the result is out2\n"); out2: printf("the result转载 2012-01-07 15:35:43 · 306 阅读 · 0 评论 -
柔性数组(flexible array)
C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。 柔性数组成员允许结构中包含一个大小可变的数组。sizeof返回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。看下面例子:typedef struct原创 2012-01-15 18:54:37 · 360 阅读 · 0 评论 -
C/C++去除字符串首尾空格函数
/** * Trim any leading and trailing white space characters from the string. * Note that escape sequences and quotes are not handled. * * @param inStr - string to trim. * @return - string wit原创 2012-01-29 14:00:30 · 1520 阅读 · 0 评论 -
C/C++中分割字符串函数
void StringSplit(char delim, const std::string &text, std::vector &strings){ std::string::size_type current = 0; while (true) { std::string::size_type idx = text.find(del原创 2012-01-29 14:22:06 · 417 阅读 · 0 评论 -
map的erase方法注意问题
typedef std::map StringFloatMap;StringFloatMap col1;StringFloatMap::iterator pos;...//remove all element having a certain valuefor(pos=col1.begin(); pos != col1.end();){ if (pos->second原创 2012-01-31 12:08:13 · 372 阅读 · 0 评论 -
C语言中枚举(enum)变量可以没有名字
C语言中枚举(enum)变量可以没有名字,如下:[cpp] view plaincopyenum { ANTE_CMD_UPLOAD = 30000, ANTE_CMD_GET_FILE, ANTE_CMD_DELETE_FILE,}; 这种情况下它就相当于define,上面的代原创 2012-02-08 20:35:36 · 1142 阅读 · 0 评论 -
禁止拷贝构造赋值函数
每个C++类只有一个析构函数,但可以有多个构造函数和多个赋值函数。其中构造函数包括默认构造函数(无参,或参数全有默认值),拷贝构造函数。在编程时,如果程序员不显式声明和定义上述函数,编译器将自动产生4个public inline的默认函数。形式为:A();A(const A&);A& operator=(const A& a)~A();【何时需要显式定义拷贝构造函数】默认的转载 2012-02-12 17:48:32 · 2296 阅读 · 0 评论 -
strcmp和memcpy比较
函数:int memcmp (const void *a1, const void *a2, size_t size) 函数memcmp用于比较字符串s1与s2的前size个字符。 如果两上字符块相同,memcmp将返回0。函数:int strcmp (const char *s1, const char *s2) 这个函数用来比较s1和s2转载 2012-07-16 15:49:11 · 1210 阅读 · 0 评论 -
rsync实现大致流程描述
一、文件同步不同主机之间的文件同步是服务器开发过程中一个重要的基础操作,它是cp及scp的一个扩充版本,能够实现不同主机之间的文件复制,能够提供增量复制,能够提供安全性验证。rsync的代码实现数量并不多,核心的文件更少,和很多理论作者的操作一样,该文件使用C语言编写,代码的编写、变量的命令、文档的编写都不是很全面。rsync的原理我在之前的一篇文章中大致有描述,也就是说原理并没有复杂到大家需转载 2013-08-31 17:01:04 · 550 阅读 · 0 评论