#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
/*@brief:管道间的进程通信(单向半双工通信)
@function :父进程向向管道写数据,子进程向管道中读数据
@attention:子进程需要等待父进程
*@date :2019-12
*/
int main()
{
/*定义字符,用于读和写 */
int fd[2];//fd[1]:读 fd[0]:写
__pid_t pid; //进程ID
int i;
int ret =pipe(fd);
printf("====当前的进程ID:%d\n",ret);
if(ret==-1){
perror("pipe error");
exit(1); //非正常执行退出进程
}
/*创建父子进程*/
for(i=0;i<2;i++){
pid=fork();
if(pid==-1){
perror("pipe error");
exit(1);
}
/*子进程创建成功 pid==0 说明事子进程*/
if(pid==0){
break;
}
}
/*子进程读数据*/
if(i==0){
close(fd[1]); //关闭父进程的写
/*定义一个读数据缓冲区*/
char BUF[1024];
ret= read(fd[0],BUF,sizeof(BUF));//读取数据
if(ret==0){ //读到文件末尾直接做一个输出
printf("已经读到了文件末尾");
}
write(STDIN_FILENO,BUF,ret); //写到屏幕中
}else if(i==1) //父进程单向写数据需要关闭子进程的读端
{
close(fd[0]);//关闭
char *str="我是爸爸,我在向管道写入数据";
write(fd[1],str,strlen(str)+1);
}
return 0;
}