子进程的返回值c

use*_*063 4 c fork named-pipes named

我需要帮助将我的子程序中的"状态代码"返回给父程序,在那里它将检查状态代码,打印代码并退出父程序.这是一个类项目,所以我会在这里放一些相关的代码,但我不会出于显而易见的原因发布整个项目.

我已经通过exec分叉并创建了子进程.父进行一些奇特的数学运算并使用命名管道将数据推送到子进程.孩子做了一些更奇特的数学.当我使用关键字时,孩子需要返回它在结束时将花式数学返回到父级的次数,其中父级将看到这一点,打印出返回的数字,然后退出父级.

    int status;
    pid_t child_id;
    child_id = fork();
    if (child_id == 0)
    {
            // put child code here
            exec(opens second process);
    }
     if (child_id < 0)
    {
            perror("fork failed\n");
            exit(EXIT_FAILURE);
    }

     while(child_id != 0)
     {
       //parent process
       //do fancy math stuff here
       // pipe
      //open pipe
      //converted math to "string" to pass to other program
      // use fprintf to send data to other program
      fprintf(fp,"%s",str);
      //close pipe
//**************************************************
//this block doesn't work, always returns 0
      if (WIFEXITED(status)){
            int returned = WEXITSTATUS(status);
            printf("exited normally with status %d\n",returned);
      }
//***************************************************
   return 0;
Run Code Online (Sandbox Code Playgroud)

第二个c程序只是一个简单的管道读取,做了一些更奇特的数学,并在我想要返回数字的地方放置了返回语句.

据我所知,有一种方法可以传递子程序的返回值,但我似乎无法理解如何.我添加了一段我发现的代码,但我似乎无法让它工作.我读过它,但也许我错过了什么?

请忽略任何语法或结构问题.

dbu*_*ush 6

您试图status通过该WIFEXITED函数进行阅读,但您永远不会给它一个值.尝试读取未初始化的值会调用未定义的行为.

您需要调用该wait函数,该函数告诉父级等待子级完成并接收其返回码:

wait(&status);
if (WIFEXITED(status)){
      int returned = WEXITSTATUS(status);
      printf("exited normally with status %d\n",returned);
}
Run Code Online (Sandbox Code Playgroud)