c/c++
文章平均质量分 54
timegoesby_001
技术改变生活
展开
-
google glog在程序中使用方法与注意事项
大部分程序其实是使用封装后的log4jcpp等进行日志处理,对于单机来说可以用glog来打点日志,但需要预先指定日志的输出目录否则均写到/tmp目录下将磁盘写满,需要注意的一点是,高级别的日志向低级别日志扩展,这样输出的日志其实会冗余很大,另外,要将所有的级别日志设置输出目录否则未设置的仍会写到/tmp目录下,以下为本人程序中的写会,供参考(也可能有更好的方法,比如不用全写上所有的级别原创 2013-11-08 11:58:19 · 2274 阅读 · 0 评论 -
网络的几种模型概图
网络模型一共有这么几种, loop , fork, select, poll, epoll ..我个人理解它们间的关系与演变过程的原因由下图所示,原创 2013-11-29 10:08:38 · 1000 阅读 · 0 评论 -
服务端研发应具备的技能(1)
标题写的有点大,但没关系,如果你是高手,那么可以略过,供参考以此共勉另外说明一点,这些均是在日常工作中常用到的或常使用的方法一,1,日志处理处理方式可以参见”多线程的程序是否真的需要锁?" 这个内容最常用的日志处理就是模拟 shell 中的tail -f方式进行读文件日志然后进行对应逻辑的处理,比如统计日志,解析日志然后将解析结果转存到其它地方等待下游处理,2,原创 2013-11-10 12:15:32 · 1194 阅读 · 0 评论 -
从数据分布的角度来看 与,或,异或运算
数据分布和这几个运算有什么关系呢?如果把数据分布空间看成一个hash[ 0x00000000 ---- 0xffffffff ] 的话,那么与会得到偏向0的hash值;或会得到偏向0xffffffff的hash值;异或得到的相对平坦均匀的hash值;原创 2013-11-29 19:49:56 · 888 阅读 · 0 评论 -
c/c++ 类中的成员变量声明时请优先考虑一下排列次序
其实我们知道内存中是以对齐方式存储的,只是我们往往定义一个类的时候对于其中的成员变量很随意的就写上,当然这对程序(类的)实现功能没什么影响,但这确实会对内存产生不必要的浪费cat class.cpp #include using namespace std;class a{ public: char c1; char c2; char原创 2013-11-28 14:15:23 · 1051 阅读 · 0 评论 -
c/c++ 实现curl http地址
其实如果这种实现,个人还是推荐脚本来搞,毕竟脚本方便些, 这里用c/c++,只是代码较方便,从之前写的项目中涉及到的一个curl部分有管用什么实现,写出来只是希望大家需要注意: 业务层,通信层, 协议层(这里我先这么区别,为的是和下面的代码对应方便来说)例如下面的代码中,标红色的地方表示针对业务层上的通信已完成(仅是通信完成,这里并不代表成功与否)而绿色我把这描述成协议层,即通原创 2013-11-28 18:35:58 · 1232 阅读 · 0 评论 -
多线程的程序是否真的需要锁?
常需要c/c++程序多线程处理需求,提到多线程就离不开锁的概念,那是不是只要是多线程就需要锁呢? 针对这个多线程使用环境,描述一下涉及到的需求(为方便仅以单机为例说事儿)需求:一个目录下定期会生成日志,例如 /logs/info.2013110101.log ...... 需要对这些日志进行某种处理(处理逻辑可能较复杂)方案一:方式: 采用单进程程序,程序读原创 2013-11-08 15:28:46 · 1070 阅读 · 0 评论 -
linux c/c++程序是否都是从main函数开始?
请抛弃思维定势以下为《程序员自我修养》片断,共勉原创 2013-11-28 19:18:22 · 1958 阅读 · 0 评论 -
c++中使用string代替new
对于在函数内申请空间常用的就是new一个区域,然后使用,问题是释放的时机,其实习惯使用智能指针来说这个也都不是问题个人常使用的就是用string,例如return_type func(***){ std::string buf(lensrc, 0); Byte * pbyte = (Byte*)&原创 2013-11-12 14:35:17 · 1314 阅读 · 0 评论 -
类的成员函数作为回调函数的方法
“类中的成员” 函数不能作为本身的回调,如果非要这样弄可以有几个办法,例如静态方式声明,提供this指针等,针对static的话我想失去了回调在类中使用的意义,网上可以搜索下提供this指针方式,之前搜索时候看到过另外就是间接将类中成员变成回调,其过程就是利用间接的一个方法调用这个回调,然后设置回调函数的地方使用这个中间的方法(在此谢过给过帮助的同学)如下我以使原创 2013-11-12 13:24:36 · 3065 阅读 · 0 评论 -
c/c++目标文件中_ZN****符号是什么意思
c/c++目标文件中符号生成规则 , 常看到形如T _Z4funcidcPc等符号而不知这个是什么意思,其实这个是根据对应函数生成的符号名称,其生成规则为:以_Z开始,如果在命名空间(类中)中的后面加个N,然后是函数名称长度,后面是函数名,后面跟参数类型,如i=int d=double..... char* = P所以下面这个例如可以描述/*symbol.cpp */原创 2013-11-12 15:11:00 · 5363 阅读 · 0 评论 -
没有core文件定位bug的可能位置
有时写c/c++程序,运行后出现core, 如果有core文件则可以gdb方便的定位问题,可是,当core文件找不到(或被删除)时如何定位?刚做了个测试,在没有core文件的情况下对程序bug进行定位cat core.cpp 1 #include 2 3 int main(int argc, char** argv){ 4 5原创 2013-11-25 17:08:41 · 2208 阅读 · 0 评论 -
c/c++ 简单的解析ini配置文件程序
现在基本使用gflags,所以不怎么使用这个读取ini对应的程序或库了,由于ini一般比较方便,所以程序中涉及到的配置文件一般都用conf.ini 针对ini的解析网上也有很多,其实只要你会写程序,完全可以自己定制一个(如果你认为有必要的话,不过我建议不要重复造轮子的好)下面这个是本地编译可用的一个例子,是不是不是那么麻烦?conf.ini[s1]原创 2013-11-08 15:49:49 · 1575 阅读 · 0 评论 -
个人推荐Makefile的写法
# set CPUS for Linux or FreeBSDPLATFORM := $(shell uname)CPUS := $(strip $(if $(shell echo $(PLATFORM)|grep Linux),\ $(shell cat /proc/cpuinfo|grep -c processor),\ $(shell sysctl -a | eg原创 2013-11-08 11:49:32 · 909 阅读 · 0 评论 -
google gflag简单的使用方法
google开源的gflags是很好的可配置参数选项,不但可以代替传统的getopt ,个人觉得最好的地方在于定义一次参数选项,其它需要使用gflags的程序模块可以直接引用,而引用的方式只需要声明一下对应的参数即可简单的例子如下,其中标红的就是程序使用某个参数变量的引用方法(a.cpp)#include #include .......DEFINE_str原创 2013-11-08 14:06:10 · 1504 阅读 · 0 评论 -
c/c++ 原生字符串分割简易方法
c/c++不像其它脚本语言可以方便的对字符串进行分割如boost中的splitphp中的explodepython中的split等。。。其实c/c++也可以完成,只不过没有简单的一个函数来完成但stringstream 与 getline的组合却可以非常完美的解决这个字符串分割问题;示例如下:cat csplit.cpp#incl原创 2014-04-08 18:02:03 · 1281 阅读 · 1 评论