Fibonacci数列Linux程序,使用fork()调用计算Fibonacci数列
时间: 2024-05-13 12:16:39 浏览: 35
下面是一个简单的 Fibonacci 数列的程序,使用 `fork()` 调用来计算 Fibonacci 数列。程序会创建两个子进程来分别计算前两个数,然后将结果返回给父进程进行输出。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int fibonacci(int n);
int main()
{
int n = 0;
printf("Enter a number: ");
scanf("%d", &n);
int result = fibonacci(n);
printf("Fibonacci(%d) = %d\n", n, result);
return 0;
}
int fibonacci(int n)
{
if (n <= 1)
return n;
int pid1, pid2;
int pipefd[2];
int result1, result2;
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
pid1 = fork();
if (pid1 == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid1 == 0) {
/* child process */
close(pipefd[0]);
result1 = fibonacci(n-1);
write(pipefd[1], &result1, sizeof(int));
close(pipefd[1]);
exit(EXIT_SUCCESS);
}
pid2 = fork();
if (pid2 == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid2 == 0) {
/* child process */
close(pipefd[1]);
result2 = fibonacci(n-2);
write(pipefd[0], &result2, sizeof(int));
close(pipefd[0]);
exit(EXIT_SUCCESS);
}
/* parent process */
close(pipefd[1]);
read(pipefd[0], &result1, sizeof(int));
waitpid(pid1, NULL, 0);
close(pipefd[0]);
read(pipefd[1], &result2, sizeof(int));
waitpid(pid2, NULL, 0);
close(pipefd[1]);
return result1 + result2;
}
```
在这个程序中,`fibonacci()` 函数使用递归来计算 Fibonacci 数列。当 `n` 小于等于 1 时,函数直接返回 `n`。
当 `n` 大于 1 时,函数会使用 `pipe()` 函数创建一个管道来进行进程间通信。然后,函数会使用 `fork()` 函数创建两个子进程来分别计算 `n-1` 和 `n-2` 的 Fibonacci 数列。子进程会将结果写入管道中,而父进程则会从管道中读取结果,并等待子进程的完成。
最后,父进程会将两个结果相加并返回。