您的位置:软件 > 开发者网络 > 技术跟踪 > Linux开发 > 正文
编写Linux实用程序的艺术
[文章信息]
作者:Peter Seebach
时间:2005-01-06
出处:IBM
责任编辑:方舟
[文章导读]
本文考察优秀实用程序所具有的品质,以及设计这种实用程序所经历的过程……
advertisement
热点推荐
· Ava Find,让搜索更为快捷
· 微软反间谍软件初探(多图)
· VB图像处理之铅笔画算法和木雕算法
· 《电脑报2004合订本》上市
· 程序员如何接私单做SOHO一族
[正文]

上一页  1 2 3 4 5  

  清单 2. errno 查找器


    #!/bin/sh
    usage() {
        echo >&2 'usage: errno [numbers or error names]\n'
        exit 1
    }
    for i
    do
        case '$i' in
        [0-9]*)
            awk '/^#define/ && $3 == ''$i'' {
                for (i = 5; i < NF; ++i) {
                    foo = foo ' ' $i;
                }
                printf('%-22s%s\n', $2 ' [' $3 ']:', foo);
                foo = ''
            }' < /usr/include/sys/errno.h
            ;;
        E*)
            awk '/^#define/ && $2 == '''$i''' {
                for (i = 5; i < NF; ++i) {
                    foo = foo ' ' $i;
                }
                printf('%-22s%s\n', $2 ' [' $3 ']:', foo);
                foo = ''
            }' < /usr/include/sys/errno.h
            ;;
        *)
 echo >&2 'errno: can't figure out whether '$i' is a name or a number.'
            usage
            ;;
        esac
    done

  这个程序通用化了吗?是的,非常理想。它同时支持数字和符号名称。另一方面,它不知道关于可能具有相同格式的其他文件的信息,比如 /usr/include/sys/signal.h。可以容易地扩展它来做到这点,但是对于这样一个便利的实用能够程序,简单地创建一个名为“signal”的拷贝来读取 signal.h,同时使用“SIG*”作为模式来匹配名称,这样会更容易。

  虽然这仅比对系统头文件使用 grep 方便一小点,但是它更不容易出错。它不会因为考虑不周的参数而产生无用的结果。另一方面,如果没有从头文件中找到给定的名称或数字,它不会产生诊断信息。它也不会费心去纠正某些输入错误。而且,由于命令行实用程序从来没有打算在自动化的环境中使用,因此它的上述特性无可非议。

  另一个例子可能是取消对输入排序的程序(请参阅 参考资料 以获得指向此实用程序的链接)。这相当简单;也就是读入输入文件,以某种方式存储它们,然后生成一个随机顺序来输出那些行。这是一个几乎具有无限应用前景的实用程序。编写这个实用程序也比编写排序程序容易得多;例如,您不需要指定您没有对哪些键排序,或者是您希望按字母顺序、词法顺序还是按数字顺序随机排序。棘手的部分在于读入可能非常长的行。事实上,上面提供的版本在搞欺骗;它假设所读入的行中没有空字节。纠正这个问题要困难多了,我在编写它时懒得去理会它。

  结束语

  如果您发现自己在重复执行某个任务,可以考虑编写一个程序来完成这个任务。如果事实证明该程序更通用化一点是合理的,那就通用化它,这样您就编写了一个实用程序。

  不要在您第一次需要某个实用程序的时候设计它。要等到您具有一些经验之后才着手设计。请随意地编写一两个原型;优秀的实用程序比糟糕的实用程序更能证明所花的时间和研究工作的价值。如果原先设想的出色实用程序最终却在您编写它之后成为无用之物,不要感到遗憾。如果您发现自己对新程序的缺点感到沮丧,您只需再执行另外一个原型化阶段。如果结果证明它是无用的,不奇怪,有时会发生这样的事情。

  您要寻求的是这样一个程序,它查找您的最初使用模式之外的通用应用。我编写 unsort 是因为,我希望找到一种从旧的 X11“rgb.txt”文件中获得随机颜色序列的容易途径。从那以后,我将它用于令人难以置信的大量任务中,这些任务都不是为了生成用于调试和基准排序例程的测试数据。

  优秀的实用程序能够为您在所有不很理想的作品上所花的时间带来回报。要做的下一件事情是使它对其他人可用,以便他们能够试验它。也要使您失败的尝试对其他人可用,也许其他人对某个实用程序具有您所不需要的用途。更重要的是,您的失败的实用程序也许是其他某个人的原型,从而给每个人带来一个美妙的实用程序。


上一页  1 2 3 4 5  

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • Linux下C开发环境的构成和安装
  • 分析Windows和Linux动态库
  • Linux环境下的高级隐藏技术
  • Linux操作系统发展简史
  • Linux内核如何从2.4升级到2.6
  • 详解Linux 2.6内核新变化
  • Linux程序设计入门-crypt
  • Linux上搭建C/C++IDE开发环境
  • Linux下C开发环境的构成和安装
  • Linux 内核调试器内幕
  • Linux 2.6内核的精彩世界
  • 网络安全成为2005年互联网发展的关键问题
  • 一个网络的十年 记第二代中国教育科研网
  • 万方数据:IPTV市场三大瓶颈 明年发展迅速
  • 周鸿祎:中国互联网找到自信 不再仰人鼻息
  • 互联网今年过大关 网络大腕聚会论道互联网
  • IT、医疗和零售 三大行业年终红包大揭秘
  • 针对全球高管的调查显示:远程办公日益盛行
  • IT行业05年将发生震荡 面临大规模技术重组
  • Advertisement