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程序只是一个简单的管道读取,做了一些更奇特的数学,并在我想要返回数字的地方放置了返回语句.
据我所知,有一种方法可以传递子程序的返回值,但我似乎无法理解如何.我添加了一段我发现的代码,但我似乎无法让它工作.我读过它,但也许我错过了什么?
请忽略任何语法或结构问题.
您试图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)
| 归档时间: |
|
| 查看次数: |
4547 次 |
| 最近记录: |