c语言编程问题(急)

1.进程的创建编写一段程序,使用系统调用fork()创建二个子进程。当此程序运行时,在系统中有一个父进程和二个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符... 1.进程的创建
编写一段程序,使用系统调用fork()创建二个子进程。当此程序运行时,在系统中有一个父进程和二个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符‘a’,子进程分别显示字符‘b’和‘c’。

下面给出了一个参考程序,里面有几处错误,请使用gdb调试修改,同时给程序添加注释解释程序。在多次运行后可以发现输出结果可能存在不同,观察记录屏幕上的显示结果,并分析原因。
参考程序:
#include <stdio.h>
Main()
{int p1,p2;
While((p1=fork())==-1);
if(p1==0)
putchar(b);
else
{while ((p2=fork())==-1);
If(p2==0)
Putchar(c);
else
putchar(a);
}
}
展开
 我来答
嚒頭
2012-10-30 · TA获得超过103个赞
知道答主
回答量:122
采纳率:0%
帮助的人:79.7万
展开全部
主要一个原因是 父进程和子进程共享代码段,父进程fork出来的子进程同时也会fork自己的子进程,下面代码已经调试,符合题目要求
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
pid_t pid_b, pid_c;

if ((pid_b = fork()) > 0) {
printf("父进程:\n");
printf("PID:%d\n", getpid());
printf("%c\n", 'a');

sleep(2);
if((pid_c = fork()) == 0) {
printf("子进程c:\n");
printf("PID:%d, PPID:%d\n", getpid(), getppid());
printf("%c\n", 'c');
exit(0);
}else if(pid_c > 0) {
sleep(1);
exit(0);
}

} else if(pid_b == 0) {
sleep(1);
printf("子进程b:\n");
printf("PID:%d, PPID:%d\n", getpid(), getppid());
printf("%c\n", 'b');
exit(0);
} else {
printf("error\n");
}

return 0;}
Soul丶誓约
2012-10-30 · 超过19用户采纳过TA的回答
知道答主
回答量:228
采纳率:0%
帮助的人:63.8万
展开全部
楼上正解··
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一浮生若梦一
2012-10-30
知道答主
回答量:40
采纳率:0%
帮助的人:9.5万
展开全部
同楼上
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式