/**
*父子进程中管道通信
*
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <error.h>
#include <sys/types.h>
#define SIZE 128 //缓存区大小
char buffer[SIZE]; //缓存区
int *fd; //文件描述符数组
int len; //写入字符串的长度
int main()
{
fd=(int *)malloc(sizeof(int) *2);
int ret=pipe(fd);
if(ret!=0)
{
perror("pipe error");
exit(1);
}
pid_t pid;
pid=fork();
int readfd=fd[0]; //管道中读
int writefd=fd[1]; //管道中写
if(pid==0)
{
close(readfd);
printf("input:");
fgets(buffer,SIZE,stdin); //接收输入
len=strlen(buffer); //获取字符串长度
buffer[len-1]='\0';
write(writefd,buffer,len);
printf("buffer=%s\n",buffer);
memset(buffer,'\0',SIZE);
close(writefd);
exit(len);
}
else if(pid!=-1)
{
int ret;
int ret_son;
wait(&ret_son);
if(WIFEXITED(ret_son))
{
len=WEXITSTATUS(ret_son);
}
close(writefd);
ret=read(readfd,buffer,len);
if(ret==-1) //从管道读端读出来
{
perror("read error");
exit(1);
}
else if(ret==0)
{
printf("写端关闭\n");
exit(1);
}
buffer[ret-1]='\0';
printf("data:");
printf("%s\n",buffer);
close(readfd);
}
else
{
perror("fork error");
exit(1);
}
}