程序开发与技巧
文章平均质量分 62
timegoesby_001
技术改变生活
展开
-
google glog在程序中使用方法与注意事项
大部分程序其实是使用封装后的log4jcpp等进行日志处理,对于单机来说可以用glog来打点日志,但需要预先指定日志的输出目录否则均写到/tmp目录下将磁盘写满,需要注意的一点是,高级别的日志向低级别日志扩展,这样输出的日志其实会冗余很大,另外,要将所有的级别日志设置输出目录否则未设置的仍会写到/tmp目录下,以下为本人程序中的写会,供参考(也可能有更好的方法,比如不用全写上所有的级别原创 2013-11-08 11:58:19 · 2274 阅读 · 0 评论 -
如何对程序进行rpm打包发布
正如之前提到的,一般项目(程序)的目录包含pkg文件夹这个中应该编写与打包对应的例程,例如我目录下结构为[clouduser@blog /home/clouduser/ZK_Serviced]$ ls AUTHORS bin data include libs logs Makefile pkg README scripts srcpkg目录下原创 2013-12-02 14:05:02 · 2228 阅读 · 0 评论 -
服务端研发应具备的技能(2)
1,日志处理通常我们处理文件,大多数都是处理完即程序退出,但在IT行业里,尤其是互联网公司,日志不是一时性的,而是源源不断的一直生成中,所以要求你的程序也需要像linux 下的tail -f命令一样,可以一直跟着文件读并处理日志,当日志文件按时天(或小时或分钟)切换时,也需要日志处理程序也可以无缝的处理那么如何实现模拟linux下的tail -f方式处理目录下日志文件呢?原创 2013-11-29 17:10:18 · 886 阅读 · 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 评论 -
linux c/c++程序是否都是从main函数开始?
请抛弃思维定势以下为《程序员自我修养》片断,共勉原创 2013-11-28 19:18:22 · 1958 阅读 · 0 评论 -
linux下如何判断elf文件是32位还是64位?
例如一个可执行文件messy,我想知道这个是32位还是64位的,可以用readelf 这个命令,参数为-h在得到的ELF Header中有一项Magic, 这个其实包含很多信息,而这个32位学是64位就对应这个Magic中的第五个值,当为02时即为64位,01即为32位有兴趣的可以试一下readelf -h messyELF Header: Magic:原创 2013-11-28 18:45:58 · 8314 阅读 · 0 评论 -
多线程的程序是否真的需要锁?
常需要c/c++程序多线程处理需求,提到多线程就离不开锁的概念,那是不是只要是多线程就需要锁呢? 针对这个多线程使用环境,描述一下涉及到的需求(为方便仅以单机为例说事儿)需求:一个目录下定期会生成日志,例如 /logs/info.2013110101.log ...... 需要对这些日志进行某种处理(处理逻辑可能较复杂)方案一:方式: 采用单进程程序,程序读原创 2013-11-08 15:28:46 · 1070 阅读 · 0 评论 -
写一个程序要格外注意的地方
准备工作:(0) 结构的分离 先画下流程图,验证没有问题再写程序,同时把不相关的模块分离开,避免一个程序做所有的工作,这样很恶心的(1)目录结构 这个是个人喜好,但我习惯目录结构如下,供参考; yourpath/project_name 项目名称 yourpath/project_name/bin/start.sh st原创 2013-11-08 10:50:36 · 733 阅读 · 0 评论 -
类的成员函数作为回调函数的方法
“类中的成员” 函数不能作为本身的回调,如果非要这样弄可以有几个办法,例如静态方式声明,提供this指针等,针对static的话我想失去了回调在类中使用的意义,网上可以搜索下提供this指针方式,之前搜索时候看到过另外就是间接将类中成员变成回调,其过程就是利用间接的一个方法调用这个回调,然后设置回调函数的地方使用这个中间的方法(在此谢过给过帮助的同学)如下我以使原创 2013-11-12 13:24:36 · 3065 阅读 · 0 评论 -
c++中使用string代替new
对于在函数内申请空间常用的就是new一个区域,然后使用,问题是释放的时机,其实习惯使用智能指针来说这个也都不是问题个人常使用的就是用string,例如return_type func(***){ std::string buf(lensrc, 0); Byte * pbyte = (Byte*)&原创 2013-11-12 14:35:17 · 1313 阅读 · 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 评论 -
google gflag简单的使用方法
google开源的gflags是很好的可配置参数选项,不但可以代替传统的getopt ,个人觉得最好的地方在于定义一次参数选项,其它需要使用gflags的程序模块可以直接引用,而引用的方式只需要声明一下对应的参数即可简单的例子如下,其中标红的就是程序使用某个参数变量的引用方法(a.cpp)#include #include .......DEFINE_str原创 2013-11-08 14:06:10 · 1503 阅读 · 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 · 908 阅读 · 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 评论