开发Linux命令行实用程序[8]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:

  在以上涉及标准输出或标准错误重定向的任一示例中,用“>>”替代“>”将把输出或错误数据附加在目标文件后面,而不是覆盖目标文件(当目标文件存在时)或创建目标文件(当目标文件不存在时)。
  
  以下所有的示例也都可以(有一个例外)结合上面显示的重定向或管道命令。我没有将这些特性添加到下面的示例,因为我认为它们在上面示例中的出现次数已经足够多了。例外情况是您不能在任何包含“-dDestination”选项的 selpg 调用中使用输出重定向或管道命令。实际上,您仍然可以对标准错误使用重定向或管道命令,但不能对标准输出使用,因为没有任何标准输出 — 正在内部使用 popen() 函数由管道将它输送至 lp 进程。
  
  $ selpg -s10 -e20 -l66 input_file
  
  该命令将页长设置为 66 行,这样 selpg 就可以把输入当作被定界为该长度的页那样处理。第 10 页到第 20 页被写至 selpg 的标准输出(屏幕)。
  
  $ selpg -s10 -e20 -f input_file
  
  假定页由换页符定界。第 10 页到第 20 页被写至 selpg 的标准输出(屏幕)。
  
  $ selpg -s10 -e20 -dlp1 input_file
  
  第 10 页到第 20 页由管道输送至命令“lp -dlp1”,该命令将使输出在打印机 lp1 上打印。
  
  最后一个示例将演示 Linux shell 的另一特性:
  
  $ selpg -s10 -e20 input_file > output_file 2>error_file &
  
  该命令利用了 Linux 的一个强大特性,即:在“后台”运行进程的能力。在这个例子中发生的情况是:“进程标识”(pid)如 1234 将被显示,然后 shell 提示符几乎立刻会出现,使得您能向 shell 输入更多命令。同时,selpg 进程在后台运行,并且标准输出和标准错误都被重定向至文件。这样做的好处是您可以在 selpg 运行时继续做其它工作。
  
  您可以通过运行命令 ps(代表“进程状态”)检查它是否仍在运行或已经完成。该命令会显示数行信息,每行代表一个从该 shell 会话启动的进程(包括 shell 本身)。如果 selpg 仍在运行,您也将看到表示它的一项信息。您也可以用命令“kill -l5 1234”杀死正在运行的 selpg 进程。如果这不起作用,可以尝试用“kill -9 1234”。警告:在对任何重要进程使用该命令前,请阅读“man kill”。
  
  系统调用与库函数比较 — 以及一点历史知识
  Linux 系统调用与 C 库函数有何不同?下面是一些介绍:
  
  首先,就其在 C 中的最初字面意义而言,两者都是“函数”,即:一段单独定义的代码,只定义该代码一次,并可以通过名称(在其作用域内的代码中任何地方以任何次数)调用它,可以向它传递参数,而且它可以返回数值。
  
  有趣的历史注解:Linux 操作系统的大部分都是用 C 编写,而且 C 是 Linux 的“母语”,对于操作系统层次编程(如编写内核与设备驱动程序)以及关于编写利用系统调用的应用程序(如 RDBMS、网络工具或定制的商业应用程序)的 Linux 系统编程都是如此。
  
  这就是为什么 Linux 是非常强大的操作系统和开发环境的原因之一。作为开发人员,您可以免费并且以透明的方式获得大量操作系统的功能 — 内存管理、进程管理、文件和目录管理、设备管理、联网和线程等等。所有您要做的就是:包括那些声明您希望使用的调用的头文件并(在某些情况下)将您的代码与实现调用的库链接。
  
  这部分上是由于历史偶然,因为 UNIX 和 C 最初基本上由 Bell Labs 同一组人员开发。事实上,C 是作为系统编程的高级语言开发的,尤其是用于编写操作系统。那以前的大多数操作系统都是用汇编语言编写,而 UNIX 自(大约)第二版以来就大部分用 C 编写,只有极少数与硬件相关的代码必须用目标平台的汇编语言编写。
  
  用高级语言编写大部分操作系统的这一能力就是为什么 UNIX/Linux 传播如此之广并且如此成功的原因之一。所有其它情况都基本相同,研究表明:若不考虑编码所用语言的级别(是汇编语言还是高级语言),程序员的生产率(以每天的代码行计)基本上相同。平均起来,一行高级语言代码要转换成多行汇编语言代码。因此,用高级语言编写相同数量的功能所花的时间少于用汇编语言编写所花时间,更不用说用较高级别的语言编写的代码更易于调试和维护了。
  

本文关键:开发Linux命令行实用程序
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top