案例分享
做自己就好
我就是我
展开
-
关于shell script案例学习
测试脚本程序如下:sh-3.2# cat ./test.shif [ -f /etc/passwd ]; then#echo 111-------->@1fiecho 222-------->@2sh-3.2#运行此脚本程序,sh-3.2# ./test.sh./test.sh: line 3: syntax error near unexpected toke原创 2014-01-07 18:42:14 · 402 阅读 · 0 评论 -
关于bool型数据的使用
背景:#define CONDITION_OFF (0)#define CONDITION_ON (1)原先的程序中对于某一个功能,只定义了0/1两种情况。bool get_condition(void){ return _get_condition();}void set_condition(bool b_cond){ _set_condit原创 2014-03-02 17:04:15 · 1012 阅读 · 0 评论 -
关于库函数头文件的使用问题
背景:#ifdef FEATURE_ONE#include #endifint main(int argc, char *argv[]){#ifdef FEATURE_ONE system("do something");#endif#ifdef FEATURE_TWO system("do something");#endif r原创 2014-03-08 13:22:12 · 691 阅读 · 0 评论 -
软件开发中常用的retry机制
背景:曾遇到过执行某一函数,却无法完成预期的功能。后来经过检查,发现需要在出错状况下多尝试几次就会提高成功率。void _check_result(void){ if (_is_function_success()) { do_next_step(); } else { printf("\nexe原创 2014-03-08 16:33:24 · 3122 阅读 · 0 评论 -
不要财大气粗的使用系统中的资源
1. 无论是linux系统或者是windows系统或者是其它的OS,系统的文件名长度是有限制的,比如linux系统的文件名长度被要求限制在255个字符。测试系统支持的文件名的最大长度的方法是:linux系统,可以在shell下面touch 一个长长的文件名进行测试;windows系统,可以创建一个长长的文件名进行测试。那你有没有遇到过有一天发现文件名长度已经增长到超过了系统的限原创 2013-12-08 13:20:47 · 404 阅读 · 0 评论 -
频繁的读磁盘导致的系统效率急剧下降的问题分析
背景:程序的执行需要依赖于预存在ROM中一个字节的值;程序在运行时在某种情况下会频繁的去读取这个值;这直接导致程序运行效率急剧下降,简单的讲就是程序响应太慢。static void _get_value(int * pvalue){ /* read the data from rom */ readvaluefromROM(pvalue); ret原创 2014-03-09 15:49:08 · 946 阅读 · 0 评论 -
做一个拒绝僵尸代码的程序员
僵尸代码就是代码中的那些一大串一大串被注释掉的部分,比如有用#if 0/#endif,有用/*以及*/,亦或者使用//等等注释掉不再使用的或者错误的代码。 而这些一大串一大串的代码会给维护代码增加难度,有时可能会成为代码维护者的噩梦。 拒绝僵尸代码的理由:(1)如果要使用grep或find工具搜索的时候,因为僵尸代码的存在可能会对你的查找结果的分析产生干扰;原创 2013-09-05 21:58:01 · 602 阅读 · 0 评论 -
为什么不能直接了当的写代码?
case1:#define FEATURE_NOT_ENABLEint main(int argc, char* argv[]){#ifndef FEATURE_NOT_ENABLE do_feature_enable(); #else do_feature_disable();#endif return 0;}case2:i原创 2014-03-09 14:09:01 · 578 阅读 · 0 评论 -
linux符号学习
有时候很想知道某个具体的符号是哪种类型的符号,未初始化的全局数据?已经初始化的全局数据?还是代码段?使用nm命令可以列出符号、符号类型以及符号的绝对地址之间的对应关系。nm可以列出main(可能是一个目标文件、或者是共享库文件或者是一个可执行文件等)中的符号对应关系。sh-# nm -s main查看nm命令的man手册,可以知道一些我们常见的符号的符号类型的含义:"B"原创 2014-03-19 18:19:00 · 348 阅读 · 0 评论 -
指针使用不当引起的系统crash
看到一段程序:分配一块内存,使用完释放内存空间时却没有从这块内存的首地址开始去free,从而导致程序挂掉了。测试案例:int main(int argc, char* argv[]){ char* ps_mem = null; ps_mem = malloc(1024*sizeof(char)); if (ps_mem) {原创 2014-03-02 14:44:52 · 950 阅读 · 0 评论 -
linux如何在目标文件中查找符号
有一天查看代码时发现客户以不正确的方式来使用我们提供的函数,跟客户沟通后客户告知我们那个封装出来的函数已经没有再继续使用了。那我们应该要如何确认呢?1. 因为客户提供给我们的是object file,所以我们可以通过直接将那个函数删除再编译代码的方式来进行验证:如果能够正常编译通过,则说明这个函数确实没有再使用了;如果编译失败,则说明客户提供的目标文件中仍然有调用这个函数。原创 2014-02-16 12:42:51 · 459 阅读 · 0 评论 -
关于fsync的问题及学习
1. 问题:因为需要写一个非常重要的文件,需要避免因系统突然断电造成的文件内容丢失问题的发生。而在调用了fopen/fwrite以及sync之后,会导致系统运行过程中用户操作卡一下。原因是sync会将buffer中所有已修改数据写入磁盘中,如果数据量大比如会影响到系统性能。所以考虑使用fsync来sync这一个文件。2. 问题:使用fsync就必须先获取文件描述符,这样原创 2014-01-17 19:24:36 · 426 阅读 · 0 评论 -
关于函数接口可重用性的问题
问题:程序中部分函数中使用的是ASCII字符串,另外一部分是使用UTF-16字符串;对于原本的需求而言,通过在ASCII字符串与UTF-16字符串之间相互来回转换是没有问题的;但是由于新的需求,发现在UTF-16与ASCII之间的转换可能会导致数据内容的丢失。UTF-16字符集是ASCII兼容的,所以ASCII转换成UTF-16字符串不会有问题;ASCII字符是有限的,它不能兼原创 2014-01-27 12:29:52 · 380 阅读 · 0 评论 -
打印系统MAC地址遇到的问题
今天遇到一个问题,需要去检查MAC地址是否正确,但是打印出来的MAC地址总是为空。这是为什么呢?使用的函数是printf("\ns_mac=%s\n", s_mac);而使用ifconfig命令查看,MAC地址却总是可以看到,sh-# ifconfig eth0eth0 Link encap:Ethernet HWaddr 00:00:00:00:FD:19原创 2013-11-18 19:34:20 · 763 阅读 · 0 评论 -
linux获取线程id的方法学习
最近一直在想:如何确认两段代码是不是在同一个线程中执行的呢?通过查看资料,发现一种比较简单的方法就是在代码中使用printf将当前线程的id打印出来。而这也分成两种情况:1. 如果是pthread,则使用,#include pthread_t pthread_self(void);2. 如果不是pthread,即是由内核创建的线程,则使用,#include pi原创 2014-01-03 12:30:34 · 1504 阅读 · 0 评论 -
关于线程安全的学习
背景:最近在学习一套库函数,因为涉及到数据的读写操作,所以库函数提供了lock与unlock函数用于对写操作进行保护。需要保护的原因是函数库没有自己的线程,它们运行在库函数调用者的线程中;所以如果没有保护机制,如果出现多个线程同时去做写数据操作就会导致共享数据出错;这类函数也称之为非线程安全的函数。什么是线程安全的?1. 如果代码会被多个线程同时调用,并且每次运行结果和单线原创 2014-02-17 18:13:10 · 396 阅读 · 0 评论 -
软件开发中关于向后兼容的理解
假设有A、B两个程序,这两个程序可能是同一小组的两个人来维护的,也可能是两个不同小组来维护的,也可能是两个不同部门来维护的,甚至有可能是两个不同的公司来负责维护的。现在假设A程序对某函数进行了修改,比如原先通过kill(pid, SIGSTOP)向B程序发送SIGSTOP信号,而现在却通过kill(pid, SIGUSR1)向B程序发送SIGUSR1信号。原先B程序是在收到原创 2013-09-18 15:35:41 · 594 阅读 · 0 评论 -
C语言使用宏所遇到的一点问题
个人感觉比较有意思,所以就记下来了。关于宏的使用原则,第一条就是永远都不要使用宏。但是就实际情况而言,除非是极小的程序,否则不使用宏是不可能的。关于使用宏的好处有:(1)在程序编译期间即可根据需要按需配置程序功能;(2)定义一些有意义的常量宏有助于增加代码的可读性,以及减小代码维护的代价。宏会在预编译阶段被替换掉。要小心的是,一定要在使用宏之前就将宏定义好。与宏比较原创 2013-10-11 12:45:43 · 930 阅读 · 1 评论 -
软件版本号的命名规则及格式学习
背景:working rule:1---->n个中间客户---->1个终极客户因为这种原因,所以在软件开发过程中会有很多种不同的版本;再由于对软件版本的命名没有预先规定一个统一的规范,从而导致对软件的管理出现很混乱的状况。所以我们必须要按照通用的软件命名规则对软件的版本号进行命名。GNU风格的版本号命名格式:主版本号.子版本号[.修订版本号[.编译版本号]]Ma原创 2014-02-13 18:35:46 · 1008 阅读 · 0 评论 -
做一个拒绝魔数的程序员
char s_name[10] = {0};if (strlen(s_name) { do_something();}这里的数字10就是所谓的魔数。 所谓的魔数就是你代码中突然出现的一个数字常量,而当你第一眼看到这个常量时你可能并不知道其代表的函数,甚至有时可能需要花很长时间才能搞清楚。 代码中的魔数会很大程度上影响到程序的可读性,如果你只看到if(s原创 2013-09-05 22:18:28 · 557 阅读 · 0 评论