tars源码漫谈第2篇------tc_common.h/tc_common.cpp(模板特化实现字符串的相关操作)

      tc_common是很common的, 里面就是一些很common的功能。 很多软件开发, 可以直接用这些common代码, 省事,放心。

      里面的代码很简单, 来看一个模板特化的代码实例:

template <>
string TC_Common::tostr<char>(const char &t)
{
    char buf[2];
    snprintf(buf, 2, "%c", t);
    return string(buf);
}

      基本上, 搞懂了这个, 就搞懂了tc_common.cpp,  而模板特化, 我们不久前已经说过, 无非就是特殊化而已。

 

      整理来看,tc_common.cpp里面无非就是:

      1.  数值转为字符串

      2.  字符串基本操作

      3.  时间转换与计算

      4.  其他

 

      有几个点值得注意, 先看:

int64_t TC_Common::now2ms()
{
    struct timeval tv;

    gettimeofday(&tv, 0);

    return tv.tv_sec * (int64_t)1000 + tv.tv_usec/1000;
}

      为什么在1000之前有int64_t呢? 很多人写代码不加这个, 导致溢出, 最后结果错误。 之前博客已经已经说过两次了。

      

      再看:

void TC_Common::daemon()
{
    pid_t pid;

    if ((pid = fork()) != 0)
    {
        exit(0);
    }

    setsid();

    signal(SIGINT, SIG_IGN);
    signal(SIGHUP, SIG_IGN);
    signal(SIGQUIT, SIG_IGN);
    signal(SIGPIPE, SIG_IGN);
    signal(SIGTTOU, SIG_IGN);
    signal(SIGTTIN, SIG_IGN);
    signal(SIGCHLD, SIG_IGN);
    signal(SIGTERM, SIG_IGN);
    ignorePipe();

    if((pid = fork()) != 0)
    {
        //父进程结束,变成daemon
        exit(0);
    }

    umask(0);

  //  chdir("/");
}

      下次写守护进程, 就很easy了, 直接套用。

 

       再看:

void TC_Common::ignorePipe()
{
    struct sigaction sig;

    memset(&sig,0,sizeof(struct sigaction));

    sig.sa_handler = SIG_IGN;
    sig.sa_flags = 0;
    sigemptyset(&sig.sa_mask);
    sigaction(SIGPIPE,&sig,NULL);
}

      这段代码是干什么用的呢? 创建守护进程需要用, 而且在写服务端程序的时候, 也需要用, 否则会让服务器产生core dump, 为什么呢? 因为:https://blog.csdn.net/stpeace/article/details/79596548, 所以, 要特别注意这点。

 

      其他的, 都很简单, 故不细说。 不要重复造轮子, 直接用tc_common.h/tc_common.cpp吧。

 

      最后说一点: tc_common中的众多类函数都是static的, 所以才可以用TC_Common::trim这种方式来调用。

 

 

       

 

  

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值