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);
}
} 展开
编写一段程序,使用系统调用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);
}
} 展开
展开全部
主要一个原因是 父进程和子进程共享代码段,父进程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;}
#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;}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询