摘要: 作为一个Linux系统下的C程序员,你可能发现调试程序是个比较麻烦的工作,虽然已经有gdb,kgdb等专业的调试软件,但如果对这些软件运用不熟练是根本达不到调试程序找出bug的目的的。又或者你对gdb已经很熟了,但运行gdb开始调试后在哪里设置断点成了你头痛的问题?当然,你可以从程序开始就以单步运行step by step来调试程序,但这会耗去你很多时间。如果你能很好地跟踪并记录程序的运行情况,那么一切将变得简单。下面我以一个实例说明我是如何操作的:首先我有一个程序主体main,其代码如下://////////////////////////////trace.c 开始//////////// 阅读全文
posted @ 2011-03-11 17:58 夏大王 阅读(244) 评论(0) 推荐(0) 编辑
摘要: Linux是一套免费使用和自由传播的类UNIX操作系统,主要用于基于Intelx86系列CPU的计算机上。Linux系统是由全世界各地的成千上万的程序员设计和实现的,其目的是建立不受任何商品化软件的版权所制约的、全世界都能自由使用的UNIX兼容产品。也许有些准备和正在使用Linux的朋友对为什么使用Linux并不十分了解。本文试就这一问题给出答案,让人们真正了解Linux带给我们的七件武器。Linux对比于商业软件,对学习者来说有一个境界上的差异,这个差异用一句话概述就是:以无法为有法,以无限为有限。这个境界上的差异也就是Linux七种武器的精华所在。一、拳头——编程能力Linux产生于一群真 阅读全文
posted @ 2011-03-11 17:28 夏大王 阅读(265) 评论(0) 推荐(0) 编辑
摘要: Vim/Vi一直是Unix/Linux系统上最流行的文本编辑器,从2001年接触UNIX至今,Vim/Vi始终是我修改系统文件、编写简单程序的首选编辑器,是居家旅行必备之工具。如何提升它的编写速度,本文着重介绍了一些使用技巧供大家参考。 值得一提的是Vim是慈善软件(CharityWare),如有赞助或评比得奖,所得将全部救助乌干达孤儿,软件使用是免费的,欢迎手头有点闲钱的使用者捐款赞助,如果没银子也没关系,至少当有评比活动时(有奖金可拿的那种)。 应用技巧一:快速注释 1、连续行注释 使用Vim/Vi编辑shell脚本,在进行调试的时候,需要进行多行的注释,每次都要先切换到插入模式,在行首输 阅读全文
posted @ 2011-03-11 17:21 夏大王 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 使用规则表达式要养成良好的习惯,就是在匹配模式的两端加上‘’。这样和shell的文件通配符号做区别。 正规表示法(RegularExdivssion,RE) 1什么是正规表示法: 什么是正规表示式(RegularExdivssion,底下简称RE)呢?简单的说,在Linux的环境下,我们可以透过『字符串以及一些特殊字符的辅助』来进行文字的比对工作,好来让使用者筛选自己所需要数据。 这些特殊的字符与搭配使用的工具,就构成了正规表示法的主轴! 例如/etc/rc.d/init.d这个目录当中好了,如果你要找到一个文件内容含有mail这个字符串的文件名,要怎么搜寻呢?利用grep配合mail以及万用 阅读全文
posted @ 2011-03-11 17:18 夏大王 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 1.嵌入式系统中对内存分配的要求 ①快速性。 嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。 ②可靠性。 也就是内存分配的请求必须得到满足,如果分配失败可能会带来灾难性的后果。嵌入式系统应用的环境千变万化,其中有一些是对可靠性要求极高的。比如,汽车的自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能相应的操作,就会发生 阅读全文
posted @ 2011-03-11 17:09 夏大王 阅读(497) 评论(0) 推荐(0) 编辑
摘要: 作者: Maco 在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要 7s 左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标——2s 以内。况且,在实际的商用环境中,设备可靠性的要求可是“5个9”(99.999%,即OOS时间低于5分钟/年),这就意味着每减少一秒钟Linux启动(设备复位)时间,对可靠性都是一个明显的提升。 言归正传,如何着手对Linux的启动时间进行优化呢? CELF(The Consumer Electronics Linux Forum)论坛为我们指引了一个方向。(1)首先是对Linux启动过程的跟踪和分析,生成详细的启动时间报告。 较为简单可行 阅读全文
posted @ 2011-03-11 16:59 夏大王 阅读(819) 评论(0) 推荐(0) 编辑
摘要: 静态函数库: 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。 动态函数库: 这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运. 阅读全文
posted @ 2011-03-11 16:52 夏大王 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 本文讨论了Linux环境下攻击者入侵成功以后常常使用的一些后门技术,并且对最著名的rootkit工具之一?knark进行了详细的分析,并且指出了在发现系统被入侵以后如何发现是否是kark及如何恢复。 什么是"rootkit"? 入侵者入侵后往往会进行清理脚印和留后门等工作,最常使用的后门创建工具就是rootkit。不要被名字所迷惑,这个所谓的“rootkit”可不是给超级用户root用的,它是入侵者在入侵了一太主机后,用来做创建后门并加以伪装用的程序包。这个程序包里通常包括了日志清理器,后门等程序。同时,程序包里通常还带有一些伪造的ps、ls、who、w、netstat等原 阅读全文
posted @ 2011-03-11 16:49 夏大王 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 1.简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次:class A{public:virtual void foo() { cout << "A::foo() is called" << endl;}};class B: public A{public:virtual void foo() { cout << "B::foo() is called" << endl;}};那么,在使用的时候,我们可以:A * a = n 阅读全文
posted @ 2011-03-11 16:34 夏大王 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 一、以兴趣为要。侯捷先生认为虽然很多人在选择职业时受到家庭、环境等方面因素的影响,不一定能从事自己非常感兴趣的工作,但是如果可能的话,一定要以兴趣为要,这样在工作时会很开心,在个人发展方面也会取得很好的成就。因为只有兴趣才能使你乐在其中,乐在其中你才会产生热情,充满热情才能使你做到卓越。二、正确的认知。侯捷先生将认知的重要性归纳为“认知影响态度,态度决定一切”。他认为一个人在选择发展道路时尤其重要的是要对自己有一个正确的认知。每个人的兴趣可能会变,有些人看到某个行业有发展,有前途,因此对这个行业、这条路产生很大兴趣,这是非常可能的。但是每个人的本质基本不变,你是否甘于寂寞,是否能够与寂寞为伍? 阅读全文
posted @ 2011-03-11 16:32 夏大王 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 有些创业者善于在3分钟内就演示好他们的点子和愿景,有些却未必。这里说说这为什么至关重要。投资人、员工、顾客和合伙人都需要“买进”你的点子,并为之兴奋。他们能够在3分钟甚至更短的时间内对你的点子形成初步的印象。这个初步的印象就是通过它我们能够看到眼前的一切的镜头。我在这周的发布会议上见了大约100个创业公司,下周还将在演示会议上见另外80个。他们当中,好的产品脱颖而出。你怎样吸引别人的注意?别期望把所有的故事都讲完,只需要吸引他们的好奇心,吊吊他们的胃口就好了。你需要准备几场不同的演示。展品演示1分钟。台上面对观众演示6分钟。面对投资人的演示大概30分钟。而电梯间演示的关键在于让他们感兴趣,回答 阅读全文
posted @ 2011-03-11 16:31 夏大王 阅读(379) 评论(0) 推荐(0) 编辑