子进程的返回值c

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

我已经通过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; 

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

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

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

您正试图通过WIFEXITED函数读取status ,但您从未给它赋值。 尝试读取未初始化的值会调用未定义的行为 。

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

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