溝通我想寫這個小程序,父母和孩子通過管道相互溝通,這裏的代碼工作,除非你'取消註釋'註釋行,比它涉及到某種的僵局,我無法弄清楚爲什麼?有任何想法嗎?通過管道在C
int main(int argc, char **argv){
int fd[2];
int fd2[2];
pid_t pid;
pipe(fd);
pipe(fd2);
pid = fork();
if(pid==0){
close(fd[1]);
dup2(fd[0],fileno(stdin));
close(fd2[0]);
FILE *output = fdopen(fd2[1],"w");
char buffer[255];
while(fgets(buffer,255,stdin)!=NULL)
printf("child: %s",buffer);
// fprintf(output,"%s",buffer);
} else {
close(fd[0]);
close(fd2[1]);
FILE *output = fdopen(fd[1],"w");
char buffer[255];
while(fgets(buffer,255,stdin)!=NULL)
fprintf(output,"%s",buffer);
//FILE *input = fdopen(fd2[0],"r");
//while(fgets(buffer,255,input)!=NULL)
// printf("Parent: %s",buffer);
}
return 0;
}
你覺得哪個進程應該首先終止,父母或孩子? –
@DavidSchwartz的孩子。但是,如果我等待子進程,那麼它又是一個僵局。 – TimNeutron
孩子如何終止?它的'while'循環等待它的'stdin'關閉。父母關閉它在哪裏?父母中的「close(fd [1])」在哪裏? –