自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

maocl1983的专栏

我是菜鸟

  • 博客(44)
  • 收藏
  • 关注

原创 linux进程间内存共享---mmap

系统调用mmap()用于共享内存的两种方式:(1)使用普通文件提供的内存映射:适用于任何进程之间;         此时,需要打开或创建一个文件,然后再调用mmap();典型调用代码如下:           fd=open(name, flag, mode); if(fd         ptr=mmap(NULL, len , PROT_READ|PROT_WRITE, MAP

2011-10-27 23:16:54 1349

转载 实现Mysql的远程登录

http://blog.sina.com.cn/s/blog_54bbad8b0100bs7v.html 折腾到凌晨3点,才弄明白mysql的远程设置。粗心大意害死人啊,其实一开始按照网上提示已经设置成功了,只不过在另一机器使用mysql query browser测试的

2011-09-01 21:03:39 551

转载 信号

http://blog.csdn.net/ljx0305/archive/2008/09/09/2904056.aspx SIGHUP    终止进程    终端线路挂断SIGINT    终止进程    中断进程SIGQUIT   建立CORE文件终止进程,并且生成core文件SIGILL   建立CORE文件      非法指令SIGTRAP  建立CORE文件      跟踪自陷SI

2011-06-20 17:43:00 414

原创 用gcc还是g++?

今天写了个service.cpp,用gcc编译:gcc -o service service.cpp;出现如下错误码:/tmp/ccCJCMyo.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0collect2: ld returned 1 exit status为什么会出现这个错误:是因为用gcc编

2011-06-03 14:29:00 700

原创 uniq和sort的组合运用

对一个文件中的数据进行排序、重复删选、以及统计重复项的数目linux的命令为:sort f.txt | uniq -c  

2011-06-01 20:59:00 1236

原创 GCC链接中的库依赖

<br />GCC在链接过程中,对参数中的库的顺序是有要求的,参数右侧的库会先于左侧的库加载,也就是说参数的解析是从右往左的。<br />    假设库B依赖与库A,则链接的时候要写为:<br />       gcc -o bin -lB -lA<br />   如果写为:<br />       gcc -o bin -lA -lB<br />   则在B中引用的A中的内容就会无法链接通过。<br /> <br />--------------------------------------------

2011-03-22 15:48:00 700

原创 GCC链接中的库依赖

<br />GCC在链接过程中,对参数中的库的顺序是有要求的,参数右侧的库会先于左侧的库加载,也就是说参数的解析是从右往左的。<br />    假设库B依赖与库A,则链接的时候要写为:<br />       gcc -o bin -lB -lA<br />   如果写为:<br />       gcc -o bin -lA -lB<br />   则在B中引用的A中的内容就会无法链接通过。<br /> <br />--------------------------------------------

2011-03-22 15:46:00 1152

原创 localtime 和 localtime_r

上程序:#include #include #include #include using namespace std;int main(int argc, char *argv[]){    time_t tNow =time(NULL);    time_t tEnd = tNow + 1800;    struct tm* ptm = localtime(&tNow);    struct tm* ptmEnd = localtime(&tEnd);    char szTmp[50] = {0}; 

2011-03-03 21:16:00 70341 6

原创 关于offsetof()的warning!

<br />先不多说,直接上程序:<br />#include <cstdlib><br />#include <iostream><br />#include <sstream><br />#include <stdexcept><br />#include <cstring><br />#include <map><br /><br />using namespace std;<br /> <br />struct test {<br />       uint32_t a;<br />};<br />

2011-03-02 20:58:00 5317

原创 Lua的基本信息调试(三)--lua_getstack

在前面那篇文章Lua的基本信息调试(二)中,我使用了lua_getstack(L, 2, &debug);去取堆栈中的错误信息,但至于错误信息在stack中的层数并不清楚,经过信息打印发现,错误信息在stack的最深处,因此,修改函数为:int pcall_callback_err_fun(lua_State* L){    lua_Debug debug;    //取得层数    uint32_t level = 0;    while (lua_getstack(L, level, &debug))

2011-02-25 20:03:00 6286 1

原创 gcc 加载库和头文件的次序

<br />gcc在加载inlcude和lib的时候是优先载入makefile里定义的,然后再去搜索环境变量里配置的默认的路径!

2011-02-22 21:56:00 731

原创 Lua的基本信息调试(二)

<br />前面说过,在我们的项目中使用的是luabind。<br />调用lua函数的接口是:call_function<bool>(m_lua, func_name, player);<br />如果func出错了,lua会抛出异常,c++程序捕捉到后程序可能会崩掉(就看有没有对异常的抛出做反映),所以光写call_function这个函数的话是看不到错误信息的,我们需要把异常捕捉出来。<br />    try {<br />            bool ret = call_function<b

2011-02-16 21:45:00 4510

原创 Lua的基本信息调试(一)

前段时间在项目中试加入了lua脚本,但由于匆忙很不完善,没有任何的调试信息,包括出错信息的打印,所以很是痛苦!最近终于开始着手完善lua程序,只是从没用过,一切都是从头学起!首先是载入脚本的时候:luaL_dofile(m_lua, pathname.c_str());如果是lua脚本的语法等基本错误,这时候luaL_ dofile会返回错误码,但想知道错误信息就必须看堆栈了。其实查看文档就知道,luaL_dofile分两步:luaL_loadfile以及lua_pcall,因此可以加入如下信息:    i

2011-02-15 21:47:00 6060

原创 简单而容易忽略的类型转换问题

<br />先看以下代码:<br />uint8_t get_stage(uint16_t cur_val, uint16_t init_val)<br />{<br /> uint8_ state = 0;<br /> float rate = cur_val / init_val;<br /> if (rate > 0.5) {<br />  state = 10;<br /> } else if (rate > 0.2) {<br />  state = 20;<br /> } else if (ra

2010-06-08 22:43:00 660

原创 小心使用定时器时发生的内存泄露

今天实现如下代码:struct info_t { uint32_t id; uint32_t count;}; void use_timer(uint32_t uid){    //...    info_t* info = reinterpret_cast(g_slice_alloc0(sizeof(info_t)));    info->id = uid;    info->c

2010-05-28 10:09:00 1637

原创 关于std::vector指针的下标“[]”的使用

#include #include #include #include using namespace std;struct test_t {       uint32_t a;       uint32_t b;};int main(int argc, char *argv[]){    test_t t;    memset(&t, 0x00, sizeof(test_t));  

2010-05-21 16:40:00 7399

原创 关于memset的慎用

先看一段代码:#include #include using namespace std;struct test_t {       test_t()       {               memset(this, 0, sizeof(test_t));       }       uint32_t a;       uint32_t add()       {       

2010-05-18 19:20:00 1256

原创 重载转换操作符

转换操作符是一种特殊的类成员函数。将类类型值转变为其他类型值的转换。operator type()必须是成员函数,不能指定返回类型,并且形参表必须为空 例如:class Test {public:       Test(int t){ t_ = t; }       ~Test(){}       //operator int(){ return t_; }       operato

2010-05-16 12:21:00 511

原创 关于map使用失误

今天又犯了个错误:原先 typedef std::map XXXMap;XXXMap xxx;然后在退出时删除:for (XXXMap::iterator it = xxx.begin(); it != xxx.end(); ++it) {   delete it->second;}这个没问题。一切OK。后来修改: typedef std::map XXX> XXXMap;XXXMap x

2010-05-11 17:29:00 1730

原创 函数指针数组的点滴

以下内容摘至《C++编程思想》:#include   using   namespace   std; #define   DF(N)   void   N(){cout DF(a);DF(b);DF(c);DF(d);void   (*func_table[])()={a,b,c,d};int   main() {     while(1){     cout     char

2010-05-08 23:24:00 457

转载 c++ 之类的前置声明

原文地址:http://software.intel.com/zh-cn/blogs/2010/05/04/c-2/?cid=sw:prccsdn1073  刚开始学习c++的人都会遇到这样的问题:定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样:一编译,就出现了一个互包含的问题了,这时就有人跳出来说

2010-05-07 14:34:00 492

原创 关于rand()和srand()的理解

函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。函数二:void srand(unsigned seed);  参数seed是rand()的种子,用来初始化rand()的起始值。 如果在rand()之前没有调用srand (),它会自动调用srand(1)一次。可以把随机数列

2010-05-07 14:05:00 725

原创 关于时间的操作

1、时间类型。 Linux下常用的时间类型有4个:time_t,struct timeval,struct timespec,struct tm。(1)time_t是一个长整型,一般用来表示用1970年以来的秒数。     time_t  long  integer (2)struct timeval有两个成员,一个是秒,一个是微妙。     struct timeval {        

2010-04-29 11:05:00 754

原创 数组中元素顺序的安排

今天写了一组数组,需要经常搜索。假设有结构体struct player_info { uint32_t id; uint32_t lv; ...};player_info players[10]; 有5个players的搜索频率比另五个高多了,所以要有心把那5个安排在数组的前面,这要减少搜索的次数我们也可以使用sort、binary_search之类的标准函数库http:/

2010-04-29 10:18:00 568

原创 关于sort、binary_search

今天在使用数组的时候,亲身体验了一把sort、binary_search,以前只是在用map、set之类的时候才用到。假设有结构体struct player_info { uint32_t id; uint32_t lv; ...};player_info players[10];想对players按id进行排序,并且用二分法进行搜索。sort有两种方法:template   void

2010-04-29 10:14:00 1081

原创 调试小技巧--define

案例一:#includeiostream>using namespace std;#define DEBUGint factorial(int num){     if(num == 0)        return 1;    else    {       # if defined(DEBUG)          static i;          printf("%d"

2010-04-23 17:56:00 670

原创 vim替换

语法为 :[addr]s/源字符串/目的字符串/[option]全局替换命令为::%s/源字符串/目的字符串/g[addr] 表示检索范围,省略时表示当前行。如:“1,20” :表示从第1行到20行;“%” :表示整个文件,同“1,$”;“. ,$” :从当前行到文件尾;s : 表示替换操作[option] : 表示操作类型如:g 表示全局替换; c 表示进

2010-04-13 09:59:00 410

转载 const 函数

用const 修饰函数的返回值如果给以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。例如函数const char * GetString(void);如下语句将出现编译错误:char *str = GetString();正确的用法是const char *str = GetString();如果函数返回

2010-04-09 16:21:00 1777

原创 using关键字

using关键字  1、using声明与using指示符:前者是声明某名字空间内的一个成员,后者是使用整个名字空间。例如:      代码:            using std::map; // ok,using声明            using namespace std; //ok,using指示符  2、该using指示符语句可以加在程序文件的几乎任何地方,包括

2010-04-09 11:34:00 1164 1

转载 new的深入分析

“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A

2010-04-08 14:10:00 542

原创 boost:pool 一实例

#ifndef LIB_MEMPOOL_HPP_#define LIB_MEMPOOL_HPP_ #include  template class MemPool {public: virtual ~MemPool() { }public: void* operator new(std::size_t n); void  operator delete(void* p, std

2010-04-08 13:56:00 1284

转载 boost::pool与内存池技术

原文地址:http://www.cnitblog.com/schkui/archive/2007/04/16/25775.html        Pool分配是一种分配内存方法,用于快速分配同样大小的内存块,    尤其是反复分配/释放同样大小的内存块的情况。 1. pool    快速分配小块内存,如果pool无法提供小块内存给用户,返回0。    Example: 

2010-04-08 12:47:00 592

转载 广播和多播,IGMP协议

原文地址:http://dev.csdn.net/author/goodboy1881/c81170474227432a957e29e474627b21.html  1.单播,多播,广播的介绍1.1.单播(unicast)单播是说,对特定的主机进行数据传送。例如给某一个主机发送IP数据包。这时候,数据链路层给出的数据头里面是非常具体的目的地址,对于以太网来 说,就是网卡

2010-04-08 09:54:00 534

转载 一个通用的单体模板

原文地址:http://www.azure.com.cn/article.asp?id=206 #include template class Singleton{ static T* ms_Singleton;public: Singleton( void ) {     assert( !ms_Singleton);     int offset = (int)(T*)1 - (i

2010-04-07 15:11:00 654

转载 降低编译时间的几条方案

http://www.azure.com.cn/article.asp?id=341 关于include的原则最多,因为包含头文件相当于将代码复制到本文件来编译,而头文件又经常是用来被别人包含的,所以工程文件多了,每个文件都有include链(包含的文件又include了其他文件),该链条不会止步于你工程,而会延伸到你所有使用的第3方库里面。A.能够去掉的include就去掉。说明:1.代

2010-04-07 14:37:00 524

转载 绝对不要重新定义继承而来的缺省参数

http://www.azure.com.cn/article.asp?id=342 看下面这个例子: class CBase{public:virtual void Test(int iTest = 0) const = 0;};class CDerived : public CBase{public:void Test(int iTest = 1) const { cout

2010-04-07 14:32:00 446

转载 图文例解C++类的多重继承与虚拟继承

http://pcedu.pconline.com.cn/empolder/gj/c/0503/579115.html 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。   举个例子,交通工具类可以派生出汽车和船连

2010-04-07 14:21:00 509

转载 c++中的explicit关键字

http://www.azure.com.cn/article.asp?id=335 c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class

2010-04-07 10:18:00 453

转载 Const,Const函数,Const变量,函数后面的Const

http://www.cnblogs.com/fancyboy2004/archive/2008/12/23/1360810.html 看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是con

2010-03-19 11:00:00 458

转载 STL中map的成员函数insert的返回值

http://hi.baidu.com/tiger_tnt/blog/item/3e6be9b5609ddcca36d3caa9.html       map在进行插入的时候是不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效,可以通过insert的返回值来判断是否成功插入。下面是insert的函数原型:      pair insert(const value_type&

2010-03-18 09:48:00 12767

空空如也

空空如也

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

TA关注的人

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