#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
int main(int argc, char **argv)
{
int pfd[2];
int ret;
pid_t pid;
char buf[20]={0};
ret=pipe(pfd);//创建一个无名管道
if(ret<0)
{
perror("pipe");
return 0;
}
printf("%d,%d\n",pfd[0],pfd[1]);
pid=fork();//创建一个子进程
if(pid<0)
{
perror("fork");
return 0;
}
else if(pid>0)
{
close(pfd[0]);
while(1)
{
strcpy(buf, "hahahahahaha");
write(pfd[1],buf,strlen(buf));
sleep(1);
}
}else{
close(pfd[1]);
while(1)
{
ret=read(pfd[0],buf,20);
if(ret>0)
{
printf("read pipe=%s\n",buf);
}
}
}
}
父进程pip出一个无名管道 ,产生两个文件描述符表pfd【0】,pfd[1]
fork 出子进程后 同样会产生两个文件描述符,分别代表读端和写端
注意!!!!!!
无名管道为单工通信,不能在一个进程中同时读写