问题描述
这是test1.c中的主要内容:
int main(int argc,char *argv[])
{
int fd1,i,*foo;
pid_t childpid;
mkfifo("myfifo1",0777);
foo = malloc(10*sizeof(int));
childpid=fork();
if (childpid== -1){
perror("Failed to fork\n");
exit(1);
}
if (childpid==0) {
execlp(argv[1],argv[1],(char *) NULL);
perror("exec failure ");
exit(1);
}
else {
wait(NULL);
fd1 = open("myfifo1",O_RDONLY,0);
for (i=0; i<10; i++) {
read(fd1,&foo[i],sizeof(int));
}
for (i=0; i<10; i++) {
printf("%d\n",foo[i]);
}
}
close(fd1);
}
这是test2.c中的主要内容:
int main(int argc,*foo;
fd1 = open("myfifo1",O_WRONLY);
if (fd1==-1) printf("error\n");
foo = malloc(10*sizeof(int));
for (i=0; i<10; i++) {
write(fd1,&i,sizeof(int));
}
printf("\n");
close(fd1);
}
当我运行./test1 ./test2时,程序挂起。我认为发生这种情况是因为在test2.c中,仅管道的一端打开,程序等待另一端打开。但是,由于以下原因,这种情况永远不会发生:
wait(NULL)
确实,如果我删除此命令,程序运行正常。但是,我认为等待总是有用的,它阻止了我们创建僵尸进程。我所有这些都错了吗?有什么方法可以保留wait命令并使程序正常工作吗?
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)