- 论坛徽章:
- 0
|
一下C语言代码实现一个功能:输入一个数字n,然后在子进程中输出n个斐波纳契数列。例如:输入8,则输出:0 1 1 2 3 5 8 13.
代码如下:- #include <stdio.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <stdlib.h>
- int *arr;
- int n;
- void fib(int *, int );
- int main()
- {
- pid_t pid;
- scanf("%d",&n);
- arr = (int *)malloc(sizeof(int)*n);
- pid = fork();
- if(pid == 0)
- {
- fib(arr,n);
- }
- else if(pid>0)
- {
- wait(NULL);
- int i;
- for(i=0;i<n-1;i++)
- {
- printf("%2d, ",arr[i]);
- }
- printf("%2d\n",arr[i]);
- }
- free(arr);
- return 0;
- }
- void fib(int *arr, int n)
- {
- int i;
- arr[0] = 0;
- arr[1] = 1;
- for(i=2;i<n;i++)
- {
- arr[i] = arr[i-1]+arr[i-2];
- }
- for(i=0;i<n-1;i++)
- {
- printf("%2d, ",arr[i]);
- }
- printf("%2d\n",arr[i]);
- }
复制代码 在子进程中我输出了正确的斐波纳契数列,可是在父进程中,我却输出了n个0序列。
我怀疑是fork()函数的 copy on write 机制造成的。
但具体是什么情况我就不知道了,请指教一下啊!{:2_168:} |
|