Fibonacci数列Linux程序,(完整版)使用fork()调用计算Fibonacci数列(3页)-原创力文档...

}

}

实验二 Linux 进程创建

实验目的

加深对进程概念的理解

练习使用fork()系统调用创建进程

练习Linux操作系统下C程序设计

实验准备知识

1. fork()函数:创建一个新进程.

调用格式:

#include

#include

int fork();

返回值:

正确返回时,等于0表示创建子进程,从子进程返回的ID值;大

于0表示从父进程返回的子进程的进程ID值。

错误返回时,等于 -1 表示创建失败 实验内容:使用 fork() 调用计算 Fibonacci 数列

Fibonacci数列是 0, 1, 1, 2, 3, 5, 8通常表示为:fibo=O,

fib1=1, fibn=fibn-1+fibn-2

写一个C程序,使用fork()系统调用产生一个子进程来计算

Fibonacci 数列,序列通过命令行显示。例如,如果参数为 5,

Fibonacci数列的前5个数字将在子进程中被输出。

因为父进程和子进程拥有各自的数据拷贝,所以需要由子进程

输出。在退出程序之前,父进程调用wait()等待子进程完成。

要求提供必要的错误检测以保证在命令行传递的参数是非负

数.

实验程序:

#include

#include

#include

#include

int main(int argc, char* argv[])

{

pid_t pid;

int i;

int f0,f1,f2;

f0=0;

f1=1;

if(argv[1]<0)

{

fprintf(stderr,"request a nun-negative number");

}

pid=fork();

//printf("pid = %d ",pid);

if(pid<0)

{

fprintf(stderr,"fork failed");

exit(-1);

}

else if(pid==0)

{

printf("argv[1] = %d\n",atoi(argv[1]));

printf("0 1 ");

for(i=2; i<=atoi(argv[1]);i++)

{ f2=f0+f1; f0=f1; f1=f2; printf("%d ",f2);

prin tf("\nchild process completed' n");

}

else

{

wait(NULL);

prin tf("pare nt process exited");

}

return 0;

}

实验结果

Eile Edit View Terminal Tabs 旦 Mp

Using Zhiwei*s New BASHRC

Ust* astri>_ldbl / dt^labl / pt_ldbl / dft_labl to enter Astro/PrimeTime/DFT Labi

[root^localhost [root&localhost Lroot^locaBiost

[root^localhost [root&localhost Lroot^locaBiost [rcot'JlocaUiost [roQt&localhost [rootOlocalnost [root^localho5t [rootfllocalhost [root^localhost [ruu tdlucdUiusl

*]# vi Lab.c

-J# gcc -o 丄ab.run lab.c

./lab.run

vi lab.cocalhost -]# vi lab.c -]# vi lab.c

?]# gcc -o lab lab,c

-1# vi lab.c

T# gcc -o lab lab.c

T# ,/lab 5

argv[l] - 5

0 1 1 2 J 5

child process cotnp丄己tEd

parent process cxitod[root^localhoEt -]#

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值