#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