【发布时间】:2019-09-02 04:04:33
【问题描述】:
父亲使用管道从标准输入中读取数据并使用管道将其发送给子进程,这样子进程就可以对输入执行字数计数。 打开和关闭管道 p[0] 和 p[1] 的问题。 为什么我不能 dup2(p[1],1) 然后 write(1,buffer,1)?仅当我在没有 dup2(p[1],1) 的情况下执行 write(p[1],buffer,1) 时才有效。
int main(int argc, char **argv){
int p[2];
int n;
char buffer[1024];
pipe(p);
if(!fork()){
close(p[1]);
dup2(p[0],0);
close(p[0]);
execlp("wc","wc",NULL);
_exit(0);
}
else{
close(p[0]);
dup2(p[1],1);
while((n=read(0,buffer,1))>0){
write(1,buffer,1);
}
close(p[1]);
wait(NULL);
}
return 0;
}
【问题讨论】: