fork和pipe如何在unix进程系统中工作?

时间:2013-06-29 10:36:26

标签: unix pipe fork

我正在努力学习考试,而我却无法找到一个简单的分叉程序。

我有这段代码并且必须向其添加代码为了让父进程通过PIPE向子进程发送值n。孩子应该加倍值,不要打印任何东西并将其返回给父母。

然后父母应该在屏幕上打印它。

int main() {
int n=1;
if(fork() == 0) {
}
printf(“%d\n”, n);
return 1;
}

我真的不知道PIPE如何工作以及如何使用它们。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

pid_t cp;
int fi[2],st;
int n;
if(pipe(fi)==-1) {perror("pipe error");exit(0);}
if((cp=fork())==-1) {perror("fork"); exit(0);}
else if(cp==0)
 {
        sleep(2);
       close(fi[1]);
      read(fi[0],&n,2);
       n*=2;
        close(fi[0]);
        exit(n);
  }
  else
   {
        close(fi[0]);
         write(fi[1],n,2);
        close(fi[1]);
        waitpid(cp,&st,0);
          printf("%d",st);
          exit(0);
  }}      

管道的工作非常简单。 PIPE包含两个末端,1个用于读取,另一个用于写入。你必须在阅读或写作时关闭适当的结尾。之后你将它用作带有read()和write()函数的常规文件。

原谅我的格式化,我在手机上打字。