Linux程序设计殿堂的善意提醒
Linux操作系统除了安全、稳定,深受系统管理员喜爱外,还有一个深受大家欢迎的原因就是其是开源的。只要系统管理员有这个能力,就可以在操作系统原有的功能上开发所需要的功能。
CIO频道每周热"点"文章
CIO如何化解IT团队人际冲突?抱守与放弃:CIO该如何抉择
如何重塑政府CIO职能?2009年CIO面临的挑战以及应对策略
三个教训 我亲历的战略转型故事远离CEO“直觉决策” CIO如何把握时机?
Linux操作系统除了安全、稳定,深受系统管理员喜爱外,还有一个深受大家欢迎的原因就是其是开源的。只要系统管理员有这个能力,就可以在操作系统原有的功能上开发所需要的功能。所以说,如果不了解在Linux操作系统下如何编程,那么这个系统管理员只能说是半个系统管理员。刚好前不久有个朋友他想走Linux程序设计这条道路,问我该怎么走?笔者今天就这个机会,对想走这条道路的朋友做一些善意的提醒。
一、要注意与C语言的差异。
在Linux操作系统下实现程序开发,包括嵌入式开发在内,基本上采用的都是C语言开发结构。但是这里需要注意的是,Linux系统下采用的C语言跟其他的C语言有很大的不同。特别是那些在学校里学过C语言,或者以前有C语言开发经历的,现在要转到Linux系统功能的开发,就需要特别注意这个问题。如下面是一个在Linux系统下开发的一个简单的屏幕欢迎界面的源代码。
int main (int argc,char** argv)
printf(“Welcome!Linux!n);
return 0;
各位仔细看看这个main函数,跟传统的C语言中的main函数有什么区别吗?从格式上看其来好像比较类似,但是在Linux操作系统下的C应用程序与其他C语言的应用程序还是有很大区别的。就拿上面这个main函数来说,就有不同。大家在仔细看看上面这个main函数,就会发现在这个函数中,笔者使用了参数。这在Linux操作系统下的C应用程序源代码中是可以的。但是如果在其他的C语言开发环境中,这是禁止的。即在main函数中不可以带参数。其实在大部分的Linux操作系统命令中都带有参数。如ls、who命令等等,都可以传递参数进去。所以说,虽然他们都是从main函数开始执行。但是统传统的C语言相比,Linux操作系统下的C语言应用程序在这个函数中可以带参数,而且还可以有返回值。
为此笔者给出的第一个善意提醒就是,如果各位读者有C语言的编程或者学习经历的,对于Linux操作系统下的C应用程序开发或许能够带来帮助。毕竟在一些语言结构与命令使用上有很多类似的地方。但是在真正的进行开发之前,最好能够通读一下Linux操作系统下C语言的编程规范。重点需要关注的是同自己以前学的C语言在语法上与编程习惯上的不同。只有如此,在时候进行Linux系统下功能开发或者嵌入式开发的时候,才不会磕磕碰碰,可以达到事半功倍的效果。
二、要想用户提供详细的错误信息。
即使是有几十年编程经验的程序员,在编写应用程序的时候也难免有考虑不周的地方,在程序运行时会出现错误。又或者在需要用户提供参数的地方,用户没有提供恰当的参数,此时也会导致应用程序运行错误。也就是说,用户在使用应用程序的时候,有可能会出现各种各样的状况。那么在应用程序开发的时候,就需要注意收集这些错误信息,并将错误信息详细、清楚的反馈给用户,让他们一看到错误信息,就知道是什么问题所造成的,该如何去调整。
如现在系统管理员要编写一个文件的备份程序。在这个备份程序运行的时候,有可能程序备份会失败。那么可能是什么原因所造成的呢?有可能是执行这个备份程序的用户权限不够,无法读取需要备份的文件或者对于目标文件夹没有写的权限。也有可能是目标文件夹的容量不够容纳需要备份的文件。又或者是在程序运行的过程中被用户手工强制中断。如果是异地备份的话,还可能是网络的原因所造成的。可见导致这个备份程序运行失败的因素有很多。如果Linux操作系统管理员在开发这个应用程序的时候,只是简单的提醒这个文件备份成功或者失败了。
在失败时,没有指出具体的原因,那么用户在排除故障原因的时候,不是要对以上各种原因进行一一确认排除吗?这显然会引起用户的反感。为此在Linux操作系统下进行应用程序的开发,需要注意同用户的交互性。特别是当应用程序运行出现问题时,要详细的向用户说明到底是哪个环节出现了问题。其实这只是多了几条代码而已,没有多少难度。就拿这个备份程序来说,在读取文件、保存文件等等都是相对独立的工作。在哪个环节上出现问题时,就即时的将这个环节的名字提示给用户。如此的话,用户可以根据这个错误提示迅速定位问题的原因并及时解决掉。
但是不少系统程序开发人员不会如此处理。在程序备份中当某个环节出现错误时,他们只是简单的抛出一个错误指令。然后错误处理函数接受到这个指令后就会提醒用户文件备份失败。但是到底是哪个环节出现了问题是只字不提,让用户自己去研究吧。
笔者是先做系统管理员,然后再进入Linux系统程序设计这个领域的。为此对于应用程序过程中抛出的一些模棱两可的错误提示或者千遍一律的程序运行失败之类的错误信息是深恶痛绝的。所以笔者要给大家的第二个善意提醒就是,在程序开发过程中,要多用用系统提供的错误函数,尽量向用户提供详细的错误信息。最好是用户一看到错误提示就可以找到问题的原因。
三、提高提示信息的可读性。
当应用程序在运行时,除了要向用户提供详细的错误提示信息外,还需要注意这个提示信息的可读性。特别是有些错误信息是操作系统底层抛出的意外,此时Linux操作系统开发人员最好能够将这些普通用户难以阅读的信息进行格式化,将其转换为用户可以读的懂的信息。在Linux操作系统中,提供了strerror函数和sys_errlist消息字符串数组,专门用来格式化各种形式的错误消息,以提高错误提示信息的可读性。如使用这个strerror函数可以将一些对用户没有什么实际含义的错误代码转换成语言相关的错误消息字符串,同时返回指向这个字符串的指针。显然读这些语言错误信息要比读哪些错误数字代码要好的多。
另外,如果一个应用程序要调用其它应用程序的话,那么在遇到意外情况时,最好能够购将在哪个应用程序上出现问题也告诉给用户。如perror函数可以将语言相关的消息(包括错误消息、警告消息等等)写入到标准输入输出,描述调用系统函数或者库函数期间遇到的错误。这个函数会输出参数字符串、错误信息、换行符等等。这里主要需要注意的是,在参数字符串中,最好能够带出出现问题的那个应用程序的名字。有时候某个应用程序可能会调用其它的应用程序,或者说某个应用程序运行时最后总共可能会调用数十个应用程序(包括系统函数、库函数等等)。此时如果系统不向用户说明到底是哪个程序程序或者系统函数出现了问题,那么用户在查找问题的时候会很累,感到无从下手。即使是这个应用程序的开发者,过了一段时间以后遇到这个问题时也可能无所适从。所以说,无论是为了自己,还是为了用户,最好在perror函数中包含导致应用程序无法运行的那个程序的名称或者代码。这是对用户进行程序维护与调试时最好的教程。
以上三点是Linux操作系统下进行程序开发过程中最基本的要求。像需要了解Linux的系统架构、系统函数、系统接口等等的内容笔者就不多说了,因为这些知识是前提。