通过管道通信,一定是单向的,一个是写端,一个是读端
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<string.h>
int main()
{
int fd[2];
pid_t pid;
int ret =pipe(fd);// fd[0]代表读端,fd[1]代表写端
if(ret==-1)
{
perror("pipe error!");
exit(1);
}
pid=fork();
if(pid==-1)
{
perror("fork error!");
exit(1);
}
else if(pid==0)
{
sleep(2);
close(fd[1]);//子进程关闭写端
char buf[1024];
ret= read(fd[0],buf,sizeof(buf));//从管道中读数据
printf("ret=%d\n",ret);
if(ret>0)
printf("Read by %dchild\n",getpid());
write(STDOUT_FILENO,buf,ret);//输出
}
else
{
close(fd[0]);//父进程关闭读端
char buf1[1024]="hello pipe\n";
write(fd[1],buf1,strlen(buf1));//从管道中写数据
printf("parent write to pipe\n");
while(1);
}
return 0;
}
结果如下: