linux 创建父进程和子进程并通信问题

1.Fibonacci序列是0,1,1,2,3,5,8,....,通常它可以表示为:fib0=0fib1=1fibn=fibn−1+fibn−2编... 1. Fibonacci序列是0, 1, 1, 2, 3, 5, 8, .... ,通常它可以表示为:
f ib0 = 0
f ib1 = 1
f ibn = f ibn−1 + f ibn−2
编写一个C程序,使用系统调用fork()创建两个子进程P1和P2。他们的任务如下:
1) 子进程P1打印自己的pid,然后使用exec(族)系统调用显示当前目录下文件和子目录的详细信息。
2) 子进程P2中生成Fibonacci序列,序列的个数在程序命令行中作为参数传入,例如,参数为7,则子进程P2生成的Fibonacci序列为0、1、2、3、5、8、13。通过某种进程通信机制(共享内存、管道、消息等IPC机制),子进程P2把生成的Fibonacci序列发送给父进程,并由父进程输出(打印)Fibonacci序列。在父子进程通信的过程中必须实现同步,以使在子进程完成生成序列之前,父进程不会输出Fibonacci序列。使用wait()系统调用可以实现各进程的同步。执行必要的错误检查以保证不会接受命令行参数传递来的负值。
要求用管道 和wait()编程实现
展开
 我来答
kwydwuf
2010-12-31 · TA获得超过7411个赞
知道大有可为答主
回答量:1527
采纳率:71%
帮助的人:2009万
展开全部
看我下面的程序,还有问题可以baidu hi我

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, const char *argv[])
{
int pid, pfd[2], seq;

if (argc != 2)
{
printf("Usage:\t %s num\n", argv[0]);
return 1;
}

seq = atoi(argv[1]);
if (seq <= 0)
{
printf("Error: seq shall be larger than 0.\n");
return 1;
}

pid = fork();
if (pid == 0)
{
/* child 1 */
execlp("/bin/ls", "/bin/ls", "-R", ".", NULL);
}
else if (pid > 0)
{
wait(NULL);
printf("\n\nThis is parent process, child 1 finished.\n");
}

/* create pipe */
pipe(pfd);
pid = fork();

if (pid == 0)
{
/* child 2 */
int next = 1, i, fib = 0, tmp;
close(pfd[0]);
for (i = 0; i < seq; i++)
{
write(pfd[1], &fib, sizeof(fib));
tmp = fib;
fib = next;
next += tmp;
}
/* -1 indicates the end of fibonacci seq */
fib = -1;
write(pfd[1], &fib, sizeof(fib));
return 0;
}
else if (pid > 0)
{
/* parent */
int fib;

close(pfd[1]);
wait(NULL);

printf("In parent process, child 2 finished, time to print fibonacci sequence...\n");
while (read(pfd[0], &fib, sizeof(fib)) == sizeof(fib))
{
if (fib >= 0)
{
printf("%4d ", fib);
}
else
{
printf("\n");
break;
}
}
printf("\n All DONE!\n");
}

return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
772814963
2010-12-22
知道答主
回答量:49
采纳率:0%
帮助的人:0
展开全部
5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式