打开命名管道进行c编写时,程序挂起-使用wait

问题描述

这是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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...