【发布时间】:2018-09-09 21:41:28
【问题描述】:
我应该将斐波那契数列的前 12 个项的总和从子进程返回给父进程,但不是377,父进程得到30976。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
pid_t childpid;
int i, fib_sum=0, fib1=1, fib2=1, temp, status;
childpid=fork();
if(childpid!=0)
{
wait(&status);
fprintf(stderr, "%d\n", status);
}
else
{
for(i=1; i<=12; i++)
{
temp=fib1;
fib_sum=fib1+fib2;
fib1=fib_sum;
fib2=temp;
}
fprintf(stderr, "%d\n", fib_sum);
return fib_sum;
}
}
我做错了什么?
【问题讨论】:
-
使用管道在进程之间传递数据。
-
锻炼是如何阻止你使用管道的?
-
如果需要从child获取数据,可以使用child更新的shared全局变量,当parent检测到child完成时,会将sum存储在shared中全球。
-
您将如何共享该全局变量? @bruceg。他必须创造一个共享的记忆。
-
来自
man 2 wait: "WEXITSTATUS(wstatus) 返回子进程的退出状态。这由子进程在退出调用中指定的状态参数的最低有效 8 位组成(3) 或 _exit(2) 或作为 main() 中的 return 语句的参数。"
标签: c fork parent-child ipc child-process