进程间通信之匿名管道—创建兄弟进程
利用匿名管道实现兄弟进程间通信,要求
- 兄进程发送字符串“This is elder brother ,pid is (兄进程进程号)”给弟进程;
- 弟进程收到兄进程发送的数据后,给兄进程回复“This is younger brother , pid is(弟进程进程号)”; */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/wait.h>
#include <string.h>
int main()
{
int fd1[2],fd2[2];
char buf1[50],buf2[50],p1[50],p2[50];
pid_t pid1,pid2;
pipe (fd1); //创建管道一
pipe (fd2); //创建管道二
if ((pid1 = fork()) > 0) //创建子进程一(就是兄进程) 通过判断进入父进程
{
if ((pid2 = fork ()) == 0) ////在父进程中再次创建子进程二(就是弟进程) 通过判断进入 弟进程
{
close (fd1[1]); //关闭管道一的 写入端
close (fd2[0]); //关闭管道二的 读入端
strcpy(buf2,"This is elder younger,pid is ");//
sprintf(p2,"%d",getpid());
strcat(buf2,p2);
read(fd1[0],buf1,50); //打开管道一的 读入端,从中读取数据
printf("\n %s \n",buf1);
write(fd2[1],buf2,50); //打开管道二的 写入端,往中写入数据
}
}
if (pid1 == 0) //通过判断进入 兄进程
{
close(fd1[0]); //关闭管道一的 读入端
close(fd2[1]); //关闭管道二的 写入端
strcpy(buf1,"This is elder brother,pid is ");
sprintf(p1,"%d",getpid());
strcat(buf1,p1);
write(fd1[1],buf1,50); //打开管道一的 写入端,往中写入数据
read(fd2[0],buf2,50); //打开管道二的 读入端,从中读取数据
printf("\n%s\n",buf2);
}
return 0;
}
/*
- 怎么操作两个管道的?
只能有一端是打开的(就是 一端操作的时候要把另一端关闭 )只能有一端是打开的(就是 一端操作的时候要把另一端关闭 ) - 兄弟进程怎么创建的?
父进程先创建一个子进程(这个就是兄进程) 然后通过判断进入父进程中,然后再次创建一个进程 这个进程就是 弟进程 父进程先创建一个子进程(这个就是兄进程) 然后通过判断进入父进程中,然后再次创建一个进程 这个进程就是 弟进程
*/