要求:编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1和P2分别向管道各写一句话:
Child 1 is sending a message!
Child 2 is sending a message!
父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。
初步理解:和以前的一个父进程创建两个子进程类似,这里只添加了一个先接收子进程1,再接收子进程2的要求,我们只需要在父进程里阻塞,等待子进程1执行完毕,然后再创建子进程2,再在父进程里阻塞,等待子进程2创建完成,这样就实现了先接受子进程1再接收子进程2的需求。
代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#include <stdlib.h>
void main(){
int filedes[2];
char buff1[]="Child1 is sending a message";
char buff2[]="Child2 is sending a message";
int pid;
if(pipe(filedes)<0)
{
perror("管道创建失败!\n");
exit(-1);
}
pid = fork();
if(pid<0)
{
perror("子进程1创建失败\n");
exit(-1);
}
if(pid == 0)
{
write(filedes[1],buff1,sizeof(buff1));
printf("子进程1发送数据成功!\n");
}else
{
wait(NULL);
pid = fork();
if(pid<0)
{
perror("子进程2创建失败\n");
exit(-1);
}
if(pid == 0)
{
write(filedes[1],buff2,sizeof(buff2));
printf("子进程2发送数据成功 \n");
}else
{
wait(NULL);
memset(buff1,0,sizeof(buff1));
read(filedes[0],buff1,sizeof(buff1));
printf("父进程中读出的数据1:%s \n",buff1);
read(filedes[0],buff2,sizeof(buff2));
printf("父进程中读出的数据2:%s \n",buff2);
}
}
}