没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux实用程序设计艺术:品质、融合与选型
"《编写Linux实用程序的艺术》是一篇探讨如何创作高质量Linux实用程序的文章。Linux系统以其丰富的工具生态系统闻名,这些工具的卓越性能和易用性极大地推动了类UNIX环境的成功。当你在开发过程中遇到现有工具难以满足需求时,可能就需要考虑自定义实用程序的开发。 优秀的Linux实用程序具备几个关键特性:首先,它们致力于将任务做到极致,与其他工具无缝协作,形成一个协同工作的整体,而不是孤立的应用程序。比如,sort和grep这些工具本身就很强大,而xargs则常常与其他工具如find一起使用,以实现更复杂的操作。 其次,实用程序的设计理念是提供灵活且高效的解决方案,类似于工具箱中的多功能工具,而非单一功能的万能解决方案。它们旨在通过模块化的方式,让开发者能够轻松组合现有工具,以满足特定场景的需求。 在选择编程语言方面,文章提到大多数UNIX实用程序采用C语言编写,因为其性能优势。然而,这并不意味着其他语言没有其用武之地。例如,对于轻量级任务或者快速原型开发,Perl和sh(或ksh)可能是更为合适的选择。选择何种语言应视具体应用场景和开发者的熟悉程度而定。 编写Linux实用程序的艺术不仅关注代码本身的效率,还包括如何设计出易于扩展、与其他工具交互良好的程序,以及在性能和开发速度之间找到平衡。通过理解这些原则,开发者可以更好地创建出符合UNIX哲学的实用工具,从而丰富和优化类UNIX系统的工具集。"
资源详情
资源推荐
编写编写Linux实用程序的艺术实用程序的艺术
编写Linux实用程序的艺术
Linux 和其他类 UNIX 系统总是附带了大量的工具,它们执行从显而易见的到不可思议的广泛功能。类 UNIX 编程环境的成
功很大程度上归功于工具的高品质和选择,以及这些工具之间相互衔接的简易性。
作为开发人员,您可能会发现现有实用程序并不总是能够解决问题。虽然能够通过结合使用现有实用程序来容易地解决许
多问题,然而解决其他问题却至少需要一些实 际的编程工作。这些后面的任务通常是创建新实用程序的候选任务,结合现有
实用程序来创建新实用程序可以通过做最少的工作来解决问题。本文考察优秀实用程序所具有的品质,以及设计这种实用程序
所经历的过程。
优秀的实用程序具有哪些品质?
Kernighan & Pike 所著的 The UNIX Programming Environment 一书中包含了对此问题的精彩讨论。优秀的实用程序是
把自己的工作做得尽可能好的实用程序。它必须与其他实用程序配合融洽;必须能够容易地与其他实用程序结合使用。无法与
其他实用程序结合使用的程序不是实用程序,而是应用程序。
实用程序应该允许您根据手边的材料廉价而容易地构建一次性的应用程序。许多人认为实用程序就像是工具箱中的工具。
设计实用程序的目标不是为了让单个工具来做所有事情,而是为了拥有一组工具,其中每个工具都尽可能好地做一件事情。
有些实用程序自身就是相当有用的,而其他实用程序则必须与一系列实用程序配合使用。前者的例子包括 sort 和 grep。
另一方面,xargs 除了与其他实用程序(最常见的是 find)配合使用外,很少单独使用。
使用什么语言来编写实用程序?
大多数 UNIX 系统实用程序都是用 C 语言来编写的。本文中的例子使用 Perl 和 sh。应该使用恰当的工具来做恰当的事
情。如果您对某个实用程序使用得足够频繁,那么用编译型语言来编写它的成本也许能通过性能提升来获得回报。另一方面,
对于程序的工作负荷很轻这种相当普遍的情况,使用脚本语言也许会提供更快的开发速度。
如果无法肯定,您应该使用自己最了解的语言。至少当您在对某个实用程序进行原型化,或在弄清它是如何有用时,程序
员效率将优先于性能调整。大多数 UNIX 系统实用程序都是用 C 编写的,这只是因为这些实用程序使用得足够频繁,以致考
虑效率比考虑开发成本更加重要。Perl 和 sh(或 ksh)可能是用于快速原型化的很好语言。对于与其他程序配合实用的实用
程序,使用 shell 来编写它们或许要比使用更传统的编程语言来编写它们要容易一些。另一方面,当您希望与原始的字节交互
时,C 或许就是最好的选择。
设计实用程序
一个不错的经验法则就是当您第二次必须解决某个问题时,首先考虑实用程序的设计。不要对第一次编写的一次性作品感
到遗憾;您可以将它看作是一个原型。第二次,请把您所需的功能与第一次所需的功能作比较。在第三次前后,您应该开始考
虑花时间来编写一个通用实用程序。即使纯粹的重复性任务也可能会给实用程序的开发带来好处;例如,由于人们对尝试以通
用的方式重命名文件感到失望,于是开发了许多通用文件重命名程序。
下面是一些实用程序设计目标;每个目标将在下面单独的小节中介绍。
做好一件事情;不要糟糕地做多件事情。关于做好一件事情的最佳例子或许是 sort。除了 sort 外,没有其他 哪个实用程
序具有排序功能。基本的思想很简单:如果一次仅解决一个问题,您就能花时间把它解决好。
设想一下,如果大多数程序都具有排序功能,但是有些仅支持按词法排序,而其他一些仅支持按数字排序,另外一些甚至
支持关键字选择而不是对整行排序,那将是一件多么令人沮丧的事情。起码,这也是恼人的。
当您发现某个问题需要解决时,应尝试将问题分解为多个部分,不要重复那些其他实用程序中已经存在的部分。您对允许
配合现有工具使用的工具关注得越多,您的实用程序就越有可能保持有用。
也许您需要编写多个程序。完成专门任务的最佳途径通常是编写一两个实用程序,再用一些线索将它们联系起来,而不是
编写单个程序来解决整件事情。使用 20 行的 shell 脚本来将新的实用程序与现有工具结合起来是很理想的。如果尝试一次解
决整个问题,随之而来的第一个变更就可能要求您全盘重新考虑。
我偶尔需要从数据库生成两列或三列的输出。编写一个程序在单个列中生成输出,然后结合使用一个对输出进行分列的程
序,这样通常会更有效率。组合这两个实用程序的 shell 脚本本身是临时性的,单独的实用程序比这个脚本的使用寿命更长。
有些实用程序服务于非常专一的需要。针对一个包含大量内容的目录,如果 ls 的输出非常快地滚出屏幕,这可能是因为
其中有一个文件具有非常长的文件名,从而迫使 ls 仅对输出使用单个列。使用 more 来对输出分页会花一些时间。为什么不
像下面这样就按长度对行排序,然后通过 tail 来管道输出结果呢?
清单 1. 世间能找到的最小实用程序 sl
#/usr/bin/perl -w
print sort { length $a <=> length $b } <>;
下载后可阅读完整内容,剩余3页未读,立即下载
weixin_38607864
- 粉丝: 3
- 资源: 934
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功