Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21740
  • 博文数量: 16
  • 博客积分: 745
  • 博客等级: 军士长
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-07 23:03
文章分类
文章存档

2010年(16)

我的朋友
最近访客

分类: LINUX

2010-02-01 20:59:15

Unit 7 Standard I/O and pipes

Keyword: STDIN, STDOUT STDERR, pipes

    标准输入、输出和管道可以说是一项伟大的发明,与Windows的对比就十分明显了。在Windows下面不同的程序之间如果要进行数据交互实在是太麻烦啦。如果要若干个不同类型的程序一起工作更是难上加难。而Linux提供了一套标准的程序接口,方便程序之间交互,而且使用方便,效率也高。尽管单个程序未必功能强大,但组合起来就可以做到很多意想不到的效果。

7.1 Three standard input and iutput三种标准接口

STDIN Standard input(设备代码是0,一般是键盘输入)
STDOUT Standard output (设备代码是1,一般是显示器输出)
STDERR Standard error (设备代码是2,一般都会显示屏输出)
首先解释一下三个接口的内容,以下是一个简单的脚本stdi.sh
#!/bin/bash
read stdin1 (从STDIN中读取ls的查找参数)
$ls –l $stdin1

$chmod u+x stdi.sh  (让stdi.sh添加执行权限)
$./stdi.sh
myfile fakefile (命令执行后myfile是一个在当前目录下的文件,fakefile并不存在于当前目录)
ls: fakefile: No such file ro directory (这就是一个出错信息,也即是STDERR)
-rw-r—r—1 brad brad 0 Jan 1 12:53 myfile (这是正常的输出,也就是STDOUT)

7.2 Redtrecting ouput to a file 标准输出到文件

首先看一下这几个标准输入输出使用的相关的东西
> :redirect STDOUT to file
2> :redirect STDERR to file
&> :redirect all output to file
>> :append  STDOUT to file
< :redirect STDIN from file
2>> :append STDERR to file
</dev/null 一个特别的系统设备,任何东西送进去都变没有
/dev/zero 另一个特别的系统设备,用以填充0

用上面的stdi.sh来说明一下
$./stdi.sh >mes.std 2>mes.err (执行完后没有任何输出,因为已经转走啦)
$
$cat mes.std
-rw-r—r—1 brad brad 0 Jan 1 12:53 myfile (文件的内容为正常输出部分的信息)
$cat mes.err
ls: fakefile: No such file ro directory (文件的内容为错误输出部分的信息)

    如果应用程序要做log就很简单啦,写个脚本redirect一下就可以。又因为Linux的所有东西都是file,所以这个功能就变得非常强大了。但如果大范围看一下,只能放在文件似乎仍然有点限制,始终未能达到应用程序之间的数据交互。当然Linux还有另一样法宝——管道(|)。

7.3 Redirecting STDOUT to a program (Piping) 标准输出到程序(管道)

    管道其实只是把两个程序之间的STDOUT和STDIN连接起来,前一个程序的STDOUT作为后一个程序的STDIN而已。所以一个好的UNIX程序必然是: make small programs that do one thing well, and expect the output of every program to become the input to another, as yet unknown, program.
简单的例子:
$ls –l /etc/ | less (ls出来的结果被less重新显示)

*tee*
讲到管道不得不提到tee。其主要的作用是将STDIN保存为一个文件。
ls /etc/ | tee save.out

    关于管道有一点要注意的就是前一个程序的STDOUT会传给后一个程序,而且仅仅是STDOUT,不包括STDERR。这样有好处,也有坏处。好处是不需要的信息不会传到后面,坏处是错误信息不可以采用管道处理。

阅读(491) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~