歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> linux下的進程通信(管道通信)

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

日期:2017/3/3 13:03:09   编辑: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

Copyright © Linux教程網 All Rights Reserved