Linux
zyp2671
Linux应用及嵌入式开发工程师,曾用平台HPUX,Solaris,Redhat,Fedora,嵌入式Linux等。
展开
-
消掉文本中的^M
方法一:# cat test.dat | tr -d /015 > test.out 这样可以将 test.dat 内 ^M(/015) 这个字元去掉, 产生 test.out 方法二:# dos2unix aaa.txt bbb.txt,会去掉aaa.txt中的^M,生成bbb.txt文件。原创 2010-01-17 19:46:00 · 3343 阅读 · 0 评论 -
妙用truss破解df命令
在HPUX,Redhat,Solaris各平台下磁盘分区信息的取得主要采用df命令。通过truss调试命令可以探索df命令实现的内部机理。命令格式:truss -l -D -f -t -o -c : 显示全面统计结果-l : 显示线程号-D : 显示系统调用完成花费的时间-f :除了跟踪当前进程外,还跟踪其子进程-o file :将输出信息写到文件file中,而原创 2010-01-06 08:50:00 · 3308 阅读 · 2 评论 -
多线程休眠
在多线程环境下,当使用sleep函数使某一进程休眠时,该线程会对外部信号失去响应。建议将休眠时间分割成较小的时间片,循环调用sleep。如下所示:for (i=1; i{ sleep(1); // 响应函数 ……}原创 2010-01-05 09:09:00 · 2200 阅读 · 2 评论 -
关于64位整型int64_t
1. 定义在头文件stdint.h中2. 使用printf输出一个int64_t整数时,对于32位系统,应使用%lld,对于64位系统,应使用%ld。原创 2010-01-04 22:20:00 · 11689 阅读 · 3 评论 -
volatile关键字
在多线程环境下,控制型的全局变量必须定义为volatile,否则在以下情况中,程序会出错。while( bStop ){ return TRUE;}在release版本中,编译器会自动优化以上代码,将bStop的值放在寄存器中,每次只读寄存器的值(实际上内存中该变量已经发生变化),导致循环无法返回。原创 2010-01-05 09:06:00 · 4217 阅读 · 0 评论 -
对/proc/buddyinfo的理解(转载)
最近总是遇到out of memory,查看了一些文档,提到了这个内核参数,特此解释一下。3.2.2. /proc/buddyinfoThis file is used primarily for diagnosing memory fragmentation issues. Using the buddy algorithm, each column represents the n转载 2010-01-15 10:44:00 · 7054 阅读 · 0 评论 -
core文件使用
当调试中的程序crash的时候,会产生一个core文件,分析这个core文件可以帮助程序员跟踪错误发生的原因。通常可以使用以下这些命令来分析core文件。1. 使用gdb: gdb -> core core -> bt(查看堆栈中的上下文)gdb命令格式:gdb -c 2. 使用dbx: dbx -core -> where(查看堆栈)/ threads(查看线程)原创 2010-01-13 09:06:00 · 2271 阅读 · 0 评论 -
uClibc(轻量级C库)
参考网址:http://www.uclibc.org/ GNU的Glibc是一个非常宠大而完整的库,至少对于嵌入式系统来说,其体积显得过于大了一些。uClibc的提出较好的解决了这样一个问题。uClibc尽可能的兼容Glibc,大多数应用程序可以在很小或完全不修改的情况下就可能使用uClibc替代glibc。通过uClibc来代替Glibc,可以在不改变应用程序功能的前提下,大大减少发原创 2010-01-13 09:13:00 · 3725 阅读 · 0 评论 -
readelf命令
readelf用来显示ELF格式目标文件的信息.可通过参数选项来控制显示哪些特定信息。(注意: readelf不支持显示archive文档, 也不支持64位的ELF文件)。 使用方法1:查看共享库的依赖库(NEEDED)和搜索名(SONAME)。readelf -d 例如:#readelf -d libuClibc-0.9.30rc2.so Dynamic se原创 2010-04-02 09:48:00 · 10372 阅读 · 2 评论 -
Linux系统分析之线程
<br />什么是线程<br /> <br />Linux线程是一类特殊的进程,拥有各自的task_struct,内核并没有特别的调度算法和数据结构来表征线程,而仅仅是作为一个普通的进程,只是和其他进程共享进程空间。也就是说,如果程序运行于多线程环境,编写程序时必须检查一下项目:是否使用了不可重入的系统函数,例如字符串分割函数::strtok();是否已经对全局变量或静态变量进行了加锁;第三方库是否支持多线程。<br /> <br />注:想要从核心获取线程id,应当使用current->pid。在核心里p原创 2010-06-28 09:45:00 · 14865 阅读 · 15 评论 -
软件开发管理,以人为本,还是以流程为本
<br />正方观点:软件开发可以通过不断细分的工序化流程来减弱开发人员个人对于项目的影响,只需要少部分人的创造性思维,而大部分开发者则严格按照工序流程进行开发<br /><br />反方观点:流程管理只能一定程度上控制项目进度和质量,项目的完成情况关键靠个人能力和素质。<br /><br />辩论前提:这里的软件开发不是指领先技术的开发,例如搜索引擎,3D引擎等,而是普通的企业应用软件开发。<br /><br />正方论证<br />某软件开发小组<br />组长:歪子(管理),道长(原创 2010-06-03 15:02:00 · 7733 阅读 · 3 评论 -
Linux系统分析之启动流程
<br /> <br />第一部分:内核的引导(核内引导)<br />启动设备使用lilo或grub等引导程序开始引导Linux系统,当引导程序成功完成引导任务后,Linux从它们手中接管了CPU的控制权, 然后CPU就开始执行Linux的核心映象代码,开始了Linux启动过程。这里使用了几个汇编程序来引导Linux,这一步涉及到Linux源代码树中的“arch/i386/boot”下的这几个文件:bootsect.S、setup.S、video.S等。<br /> <br />其中bootsect.S是生原创 2010-06-07 09:31:00 · 10974 阅读 · 8 评论 -
虚拟机上SourceInsight访问Linux系统的代码
首先在Linux系统上安装samba 然后启动Windows虚拟机,在资源管理器中将samba的地址(例如//192.168.1.10/share)映射为一个虚拟盘符Z 最后启动SourceInsight,在Z盘上建立工程,并导入文件。 注意:以后每次使用SourceInsight之前先要连接samba服务器,比如说打开盘符Z。原创 2010-03-17 08:57:00 · 6080 阅读 · 0 评论 -
GCC使用技巧之预编译
对源文件执行预编译:gcc -E /working/busybox/busybox-1.10.1/util-linux/fdisk.c | less 可以得到编译所需头文件的位置和依赖关系,如下所示:# 1 "/working/busybox/busybox-1.10.1/util-linux/fdisk.c" # 1 "" # 1 "" # 1 "/working原创 2010-03-15 08:53:00 · 2782 阅读 · 0 评论 -
GCC使用技巧之默认搜索路径
GCC编译器自身有默认的头文件搜索路径,通常是安装目录或者Toolchain的目录。编译程序时可以通过编译选项和环境变量设置自定义搜索路径。如果没有指定搜索路径,GCC会在默认的头文件搜索路径中查找头文件(包括系统头文件)。例如,以RPM方式安装GCC,则默认搜索路径为: 对头文件:/usr/local/include//usr/include/ 对库文件:/us原创 2010-03-11 08:42:00 · 3059 阅读 · 0 评论 -
ASSERT与VERIFY宏
ASSERT与VERIFY宏在Debug模式下作用基本一致,二者都对表达式的值进行计算。如果值为真(非0),则不进行任何操作;如果值为假(0),则程序中止,并输出诊断信息。在Release模式下效果完全不一样。ASSERT不计算表达式的值,也不会输出诊断信息;VERIFY仍然计算表达式的值,但不管值为真还是假都不会输出诊断信息。使用范例:assert(ptrPath != NULL);原创 2010-01-17 19:52:00 · 2874 阅读 · 0 评论 -
隐蔽的数据溢出问题
unsigned int blocks = 20000;unsigned int blocksize = 5000;int64_t totalsize;// overflow, error!!totalsize = blocks * blocksize;// mandatory type transfer, right!totalsize = (int64_t)bl原创 2010-01-22 09:04:00 · 1551 阅读 · 0 评论 -
原码、反码、补码
正数:原码、反码、补码一样[+7]原= 0 0000111 B[+7]反= 0 0000111 B [+7]补= 0 0000111 B 负数:原码就是原来的表示方法、反码是除符号位(最高位)外取反、补码=反码+1[-7]原= 1 0000111 B[-7]反= 1 1111000 B[-7]补= 1 1111001 B 当做加法时,只需将原码相加即原创 2010-02-22 15:17:00 · 2413 阅读 · 0 评论 -
UT测试观点
1) 内存检查:是否有内存泄露,空指针,野指针,变量是否初始化。2) 输入检查:是否对所有的输入情况都能正常处理,包括异常情况,如空指针,异常整数。3) 字符类型检查:是否合理的处理了Unicode,多字节,单字节的转换。4) 语言检查:在各种语言环境中测试,同时文本型的输入参数也可以设置为不同语言的文本。5) 信号检查:确认信号会不会对程序造成影响,尤其是程序中存在堵塞型的系原创 2009-12-30 13:52:00 · 2285 阅读 · 2 评论 -
CMMI与敏捷开发模式
1) CMMI开发模式优点是开发流程制度化和重视过程(设计,文档,编码,测试,原因分析),强调项目的可控性(Risk管理),缺点是开发周期长,灵活性差。 CMMI体系适用范围的特征:产品/项目创新要求不高,设计和需求比较稳定,人员规模比较大。 Key word:RD/BD/FD/DD/CD/UT/FT/ST, t原创 2009-12-30 14:12:00 · 4614 阅读 · 0 评论 -
GCC使用技巧之编译选项
GCC常用编译选项:1) -c 指定源文件(.c,.cpp) 2) -o 指定目标文件(.o,可执行文件) 3) -L 指定共享库的搜索路径或者全路径名 4) -l 指定共享库的名称 5) -I 指定头文件的搜索路径 6) -D 指定编译时定义的宏 7) -g 编译时加入调试信息 8) -ldl 表示生成的对象模块原创 2010-03-10 08:40:00 · 2019 阅读 · 0 评论 -
GCC使用技巧之环境变量
1) 编译时头文件搜索路径① C_INCLUDE_PATH 编译C程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定-isystem选项一样。会首先查找-isystem指定的所有目录。 ② CPLUS_INCLUDE_PATH 编译C++程序时使用该环境变量。该环境变量指定一个或多个目录名列表,查找头文件,就好像在命令行中指定-i原创 2010-03-12 09:07:00 · 2407 阅读 · 0 评论 -
Linux与Windows系统的差异
1) 文件命名的规则不同Windows系统下文件名不区分大小写,文件名中不能包含[/,/,,>,|,”,:,*,?]等字符。Unix系统下文件名区分大小写,文件名中可以使用转义符[/]来处理特殊字符[/,,>,|,”,:,*,?],唯一不允许的是表示路径的字符[/]。2) 文本文件的换行符不同Dos和windows采用回车+换行(CR(/n)+LF(/r)) 表示下一行,即原创 2009-12-30 13:42:00 · 472 阅读 · 0 评论 -
Linux与windows C++开发异同
1) 使用的库不同。windows下图形开发一般用微软的MFC或.net库,而Linux下则常用qt库。C/C++通用库(c库,STL库)的接口相同,但内部实现不同。2) 编译器不同。windows下用的是微软编译器VC或.net,而Linux下则用gcc。3) 开发环境不同。windows的编译器自动生成makefile,而Linux则需要手动编写makefile,但自由度很高。原创 2009-12-30 13:44:00 · 2668 阅读 · 0 评论 -
C与C++语法的不同点
Linux下通常使用免费的编译器gcc。其中gcc主要用来编译C语言代码,g++主要用来编译C++代码。如果想用gcc编译c程序,则要注意C与C++对语法要求的不同点,例如:1) C程序是从main函数开始,C++程序是从全局变量的构造函数开始2) 变量必须声明在语句前3) 没有bool类型4) 声明枚举变量是必须在枚举类型前加上enum,而C++则不需要5) 不支持引用原创 2009-12-30 13:46:00 · 577 阅读 · 0 评论 -
彻底关闭SElinux
SElinux功能可能会对某些程序的访问权限进行限制,彻底关闭SELinux的方法如下:1) 在SELinuxManagement 里设置成disable 2) 编辑/etc/sysconfig/selinux,把第一条选项改为 disabled原创 2009-12-31 09:14:00 · 2438 阅读 · 0 评论 -
Linux系统分析之进程
<br />1. 什么是进程<br />进程是处于执行期的程序以及它所包含的所有资源的总称,包括虚拟处理器,虚拟空间,寄存器,堆栈,全局数据段等。<br /> <br />在Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(Process Control Block,简称PCB)。PCB中包含了很多重要的信息,供系统调度和进程本身执行使用。所有进程的PCB都存放在内核空间中。PCB中最重要的信息就是进程PID,内核通过这个PID来唯一标识一个进程。PID可以循环使用,最大值是32768。原创 2010-06-21 09:04:00 · 6958 阅读 · 0 评论