编写一个程序实现以下功能: (1)使用fork()创建进程。 (2)使用管道实现子进程和父进程之间的通信。

如题所述

编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。
〈程序〉
#include<stdio.h>
main()
{
int p1,p2;
if(p1=fork()) /*子进程创建成功*/
putchar('b');
else
{
if(p2=fork()) /*子进程创建成功*/
putchar('c');
else putchar('a'); /*父进程执行*/
}
}

<运行结果>
bca(有时会出现abc的任意的排列)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

编制一段程序,实现进程的管道通信。使用系统调用pipe()建立一条管道线。两个子进程p1和p2分别向通道个写一句话:
child1 process is sending message!
child2 process is sending message!
而父进程则从管道中读出来自两个进程的信息,显示在屏幕上。

〈程序〉
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
int pid1,pid2;

main( )
{
int fd[2];
char outpipe[100],inpipe[100];
pipe(fd); /*创建一个管道*/
while ((pid1=fork( ))==-1);
if(pid1==0)
{
lockf(fd[1],1,0);
sprintf(outpipe,"child 1 process is sending message!");
/*把串放入数组outpipe中*/
write(fd[1],outpipe,50); /*向管道写长为50字节的串*/
sleep(5); /*自我阻塞5秒*/
lockf(fd[1],0,0);
exit(0);
}
else
{
while((pid2=fork( ))==-1);
if(pid2==0)
{
lockf(fd[1],1,0); /*互斥*/
sprintf(outpipe,"child 2 process is sending message!");
write(fd[1],outpipe,50);
sleep(5);
lockf(fd[1],0,0);
exit(0);
}
else
{
wait(0); /*同步*/
read(fd[0],inpipe,50); /*从管道中读长为50字节的串*/
printf("%s\n",inpipe);
wait(0);
read(fd[0],inpipe,50);
printf("%s\n",inpipe);
exit(0);
}
}
}
〈运行结果〉
延迟5秒后显示:
child1 process is sending message!
再延迟5秒:
child2 process is sending message!

附:我承认我是复制的 不过很符合题意~
温馨提示:内容为网友见解,仅供参考
无其他回答

...使用fork()创建进程。 (2)使用管道实现子进程和父进程之间的通信...
编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。〈程序〉#include<stdio.h>main(){int p1,p2; if(p1=fork()) ...

编程:用fork()创建一子进程,子进程求前10个自然数的和并打印,系统调用...
if (pid == 0){\/\/ 子进程,调用其入口函数SubMain();\/\/ 子进程从此处结束exit(0);}else if (pid > 0){\/\/ 此处是父进程int status;pid_t tmpPid = wait(&status);if (tmpPid == pid){cout << "父进程通过 wait 函数知道子进程已经结束" << endl;}}return 0;} ...

...实现在程序运行时通过系统调用fork( )创建两个子进程
int main(){ int pid;\/*这里创建了一个子进程1*\/ pid=fork();if(pid==0)printf("I am son,my pid is %d.\\n",getpid());else if(pid>0){ \/*从子进程1返回到父进程时,再创建子进程2。*\/ printf("I'm father ,my pid is %d.\\n",getpid());pid=fork();if(pid==0)print...

进程系统调用——fork函数深入理解(代码演示)
fork函数的基石是创建两个几乎完全一样的进程副本,每个进程从代码的同一位置开始执行。父进程和子进程虽然非常相似,但它们拥有独立的PID(进程标识符),以及各自的用户级虚拟地址空间。子进程复制了父进程的地址空间,包括文本、数据、堆和栈,以及打开的文件描述符。这使得子进程能够访问父进程的文件。在...

用fork()创建的子进程怎么对其进行挂起以及挂起后怎么让其重新执行...
父进程fork子进程10秒后,向子进程发 SIGSTOP信号,让其停止运行。 再过5秒后,发 SIGCONT 让子进程恢复执行。再过20秒后,杀掉子进程,父进程也结束。还有疑问,可以baidu hi我,记得加分吧。include <sys\/types.h> include <signal.h> include <stdio.h> include <unistd.h> void child_...

探索Linux系统中的Fork进程管理linuxfork进程
Fork进程管理是Linux系统之间最常用的一种进程管理模式,它可以有效地利用系统资源,同时有利于安全性和效率的提高。Fork进程管理的核心原理是使用一个主进程,即父进程,创建其他多个子进程,每个子进程可以同时运行不同的任务。Fork进程管理模式可以有效地利用多核CPU资源,提高系统的运行效率和性能,可以有效...

C语言中怎么用fork()创建子进程运行程序并且计算时间
1、fork一般用于处理多线程任务。比如在网络中,需要同时发送多种请求报文,则可以fork出子进程来进行发包任务,而父进程则直接去做自己的逻辑任务。 2、所谓运行时间指的是已经运行了多长时间还是从进程创建到进程退出的时间?输入的程序是由程C语言中怎么用fork()创建子进程运行程序并且计算时间 ...

操作系统课程设计 (包括进程管理、进程的同步和互斥、存储管理)
课程设计的具体内容如下:设计1 进程管理1.设计目的加深对进程概念的理解,明确进程和程序的区别;进一步认识并发执行的实质;实现Linux中进程通信的两种方式:软中断和管道通信。2.设计内容1)进程的创建和控制编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。每个...

如何以守护进程在linux系统下执行
编写守护进程程序的要点:(1)让程序在后台执行。方法是调用fork()产生一个子进程,然后使父进程退出。(2)调用setsid()创建一个新对话期。控制终端、登录会话和进程组通常是从父进程继承下来的,守护进程要摆脱它们,不受它们的影响,方法是调用setsid()使进程成为一个会话组长。setsid()调用...

Python入门--进程和线程
创建进程的主要目的是实现多并发,每个进程独享一个CPU资源。进程之间内存相互隔离,主进程和子进程的内存也是隔离的。创建进程后,我们可以进行启动和等待操作。以下是创建一个进程的程序运行结果。创建大量进程可以通过进程池Pool实现,这样可以简化进程创建过程。Pool的使用方法如下。进程间通信是必要的,操作...

相似回答