C语言笔记-pipe的使用

C语言做的每个程序都有一个独立的功能,我们可以将多个程序使用管道连接到一起。原理是将前一个的stdout –> 后一个的stdin,形成管道传输。

我们现在写一个程序avg.c,求任意个数的平均值:

1
2
3
4
5
6
7
8
#include <stdio.h>
int main() {
int s, n;
scanf("%d,%d", &s, &n);
float v = s / n;
printf("v = %f\n", v);
return 0;
}

进行编译后我们得到avg

1
2
3
$ ./avg
3000,3
v = 1000.000000

看到程序可以正常求平均值,

我们再写一个统计输入的程序acc.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main() {
int flag = 1;
int i;
int count = 0;
int s = 0;
while(flag){
scanf("%d", &i);
if(0==i)
break;
count++;
s+=i;
}
printf("%d,%d\n",s,count);
return 0;
}

进行编译后我们得到acc

1
2
3
4
5
$ ./acc
3000
2000
0
5000,2

输出数据总数5000和数据个数2

我们不妨使用以上两个程序结合起来,将所有数据进行统计acc,之后通过管道经过avg计算平均值,命令可以写为

1
$ ./input |  ./output

针对这个例子这里写成

1
2
3
4
5
6
7
8
$ ./acc | ./avg
1000
2000
3000
6700
12000
0
v = 4940.000000

输入完成我们便得到了对应的平均数。
以上就是通过管道,将两个小程序连接起来得到更复杂的程序的过程。

作者

Arthur LI

发布于

2017-08-05

更新于

2023-03-25

许可协议

评论