linux下的进程通信(管道通信)

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
	int fd[2];//管道
	char inbuff[64],outbuff[64];
	pid_t pid1,pid2;
	pipe(fd);//创建管道  fd[1]用于写数据,fd[0]用于读数据
	pid1=fork();//创建子进程1
	if(pid1==0){
	close(fd[0]);//关闭管道用于读数据的一侧
	sprintf(inbuff,"Child 1 is sending!");
	write(fd[1],inbuff,32);//在子进程1中往管道写32字节的的数据
	sleep(5);
	exit(0);
	}
	else if(pid1>0){
	waitpid(pid1,NULL,0);//等待子进程1执行完毕
	pid2=fork();//创建子进程2
	if(pid2==0){
	close(fd[0]);//关闭管道用于读数据的一侧
	sprintf(inbuff,"Child 2 is sending!");
	write(fd[1],inbuff,32);//在子进程2中往管道继续写32字节的的数据

	sleep(5);
	exit(0);
	}
	else if(pid2>0){
	close(fd[1]);//关闭用于写数据的一侧
	read(fd[0],outbuff,32);//父进程读取管道中的32字节的数据
	printf("%s\n",outbuff);
	read(fd[0],outbuff,32);//父进程继续读取管道中的32字节的数据

	printf("%s\n",outbuff);
	}
	}
	return 0;
}

关键函数fork   pipe可以参考我转载的两篇博客:

fork:http://blog.csdn.net/ShanaMaid/article/details/51345361

pipe:http://blog.csdn.net/myarrow/article/details/9037135

你可能感兴趣的:(c,linux)