将一个程序的输出接到两个程序的输入
2008-10-31 13:13
218 查看
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://syre.blogbus.com/logs/29171720.html
unix的管道是个好东西,可以串起几个命令来实现强大的功能。不过有时候如果想要把一个程序的输出接到两个程序的输入,单靠 | 是不成了。要么先把程序的输出重定向到一个文件,不过这在输出量很大的时候不算是一个好办法。
下面是实现这种功能的一个方法:
mkfifo /tmp/fifo
prog2 < /tmp/fifo &
prog1 | tee /tmp/fifo | prog3
这就会把prog1 的标准输出同时给 prog2 和 prog3 的标准输入。
这里mkfifo是创建一个命名管道,这样可以有多个管道使,tee 则会把输出同时输出到一个文件和标准输出,实现了分岔。prog2 < /tmp/fifo & 这里要加个 &,不然管道里没数据 prog2就会阻塞。
这几行东西是从《Unix环境高级编程》上看来的。利用命名管道,还可以变出别的东西。
比如用diff比较两个命令的输出。
mkfifo /tmp/fifo1
mkfifo /tmp/fifo2
ls dir1 > /tmp/fifo1 &
ls dir2 > /tmp/fifo2 &
diff /tmp/fifo1 /tmp/fifo2
unix的管道是个好东西,可以串起几个命令来实现强大的功能。不过有时候如果想要把一个程序的输出接到两个程序的输入,单靠 | 是不成了。要么先把程序的输出重定向到一个文件,不过这在输出量很大的时候不算是一个好办法。
下面是实现这种功能的一个方法:
mkfifo /tmp/fifo
prog2 < /tmp/fifo &
prog1 | tee /tmp/fifo | prog3
这就会把prog1 的标准输出同时给 prog2 和 prog3 的标准输入。
这里mkfifo是创建一个命名管道,这样可以有多个管道使,tee 则会把输出同时输出到一个文件和标准输出,实现了分岔。prog2 < /tmp/fifo & 这里要加个 &,不然管道里没数据 prog2就会阻塞。
这几行东西是从《Unix环境高级编程》上看来的。利用命名管道,还可以变出别的东西。
比如用diff比较两个命令的输出。
mkfifo /tmp/fifo1
mkfifo /tmp/fifo2
ls dir1 > /tmp/fifo1 &
ls dir2 > /tmp/fifo2 &
diff /tmp/fifo1 /tmp/fifo2
相关文章推荐
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
- 9.1 定义一个带参数的宏,使两个参数互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
- 习题 6.14 编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2, 输出0;若s1<s2,输出一个负数。不要用strcmp函数。两个字符串用gets函数输入。
- 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序
- 简单编程(三)编写一个程序,要求用户输入两个整数,然后计算并输出他们的和、差、积、商。
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 编写一个小程序,从标准输入读入一系列string对象,寻找连续重复出现的单词。程序应该找出满足一下条件的单词:该单词的后面紧接着再次出现自己本身。跟踪重复次数最多的单词及其重复次数,输出.
- c语言:编写一个程序,输入a,b,c三个值,输出其中最大者
- 输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132
- /*编写程序,其中自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数*/
- 编写一个程序来计算这两个序列不断变化的总和,直到达到某个次数。让用户交互地输入这个次数。
- 编写一个程序,输入两个包含 5 个元素的数组,先将两个数组升序排序,然 后将这两个数组合并成一个升序数组(合并排序)。
- (1)任务描述 编写一个程序:输入一个身份证号,判断该号码对应的人是否是18至25岁女孩,是则输出”yes”,否则输出”no” (2)功能要求 ①输入一行给出正整数N(<= 100)是输入的身份证号码
- 编写一个程序:输入一个身份证号,判断该号码对应的人是否是18至25岁,是则输出”yes”,否则输出”no”。