当前位置: 代码迷 >> Linux/Unix >> 重定向跟管道——让Linux如虎添翼
  详细解决方案

重定向跟管道——让Linux如虎添翼

热度:716   发布时间:2016-04-29 12:25:25.0
重定向和管道——让Linux如虎添翼

Linux操作系统设计了重定向和管道,让“组合”的威力硕大无比,这是Windows无法比拟的,废话少说,下面看看几个例子。

首先利用vi编辑器写个简单的C程序吧,就叫avg.c吧,如下图所示。


程序逻辑很简单,就是输入sum和n然后输出sum/n的值。

下面编译、运行一把,如下图所示。


接下来见识一下重定向的威力,可以将标准输出重定向到一个文件中,如下图所示。图中用./avg.out >>avg.txt命令将标准输出重定向到avg.txt文件中,终端不再输出提示信息,直接输入80,10,再cat avg.txt,可以看到标准输出已经重定向到avg.txt文件中。再次输入./avg.out >>avg.txt命令,输入80,20,标准输出再次追加到文件中。


如果希望标准输出以覆盖的显示重定向到avg1.txt文件中,输入命令./avg.out >avg.txt即可,注意只有一个“>”,如下图所示。


那么可不可以重定向到标准输入流呢?答案是肯定的。首先新建一个文件input.txt,里面存放待输入程序的数据80,10,如下图所示。


接下来,通过命令./avg.out <input.txt即可将文件重定向到标准输入流,如下图所示。


还可以将错误流重定向到文件,通过命令./avg.out 1>>a.txt 2>>b.txt,将标准输出流重定向到a.txt文件。错误流重定向到b.txt,如下图所示。


接下来该见识一下管道的威力了,据此,在写一个简单的C程序input.c,如图下图所示。


这回,通过管道,把input.out和avg.out连接起来,一个程序完成输入数据并求和及其统计输入个数,一个求平均值,据此,通过管道,完成了诸如输入公司每个员工的工资,求公司员工的平均工资,输入学生各科成绩,求学生的平均成绩之类的功能。输入./input.out | ./avg.out命令即可完成功能,如下图所示。


那么,将管道和重定向集合起来会怎么样呢?威力会更大!如下图所示。


正如你所料的,这回你可以把数据保存在文件了,然后通过一条命令./input.out <input.txt | ./avg.out >>output.txt即可将两个可执行文件连接起来,最后将运行结果重定向到output.txt文件中。

至此,Linux的重定向和管道的用法就差不多了,我们可以看到,通过重定向和管道机制,可以将几个功能简单的小程序组合起来,完成更加强大的功能,Linux就是靠这种机制,使自己如虎添翼,无懈可击!