unix pipe() 和dup2()的使用方法和原理
来源:百度知道 编辑:UC知道 时间:2024/07/02 08:15:49
...可以更清楚地解释一下原理么?
pipe(),父子进程之间通讯工具。pipe有读写两端,用int表示。0-read, 1-write.一端进程将数据写入write内,另一进程由read段读出。使用参数为一个int数组,共两个元素,用以表示读写两端的状态。
close(),用于关闭清空pipe某端,参数为表示pipe端口数组二元素之一。
dup2(),用于redirection, 将pipe某端与标准i/o相连,即将standout information 写入或者pipe内容被standin独出。如dup2(data[1], STDOUT_FINENO).是进程与外界相连的一个工具。
1. 编写程序w.c随机产生1000个的整数,把他们写到屏幕上,每行一个。
2. 编写程序r.c从键盘读入整数计算它们的平均数,遇到文件结束符^D终止。
3. 合并程序w.c和r.c为wr.c用fork产生两个进程,子进程为完成w.c的工作,父进程完成r.c的工作,使得父进程产生的整数通过pipe传递到子进程。
五、实验报告要求
给出wr.c的程序源代码。
六、参考实例
wr.c:
#include <stdio.h>
main(){
int i,pid,r,x,count,p[2];
long int sum;
if(pipe(p)==-1){printf("pipeerr\n");exit(1);}
if((pid=fork())==-1){printf("forkerr\n");exit(1);}
if(pid==0){
close(p[0]);
dup2(p[1],1);
srand(getpid());
for(i=0;i<1000;i++)printf("%d\n",rand());
<