#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
char buf[100];
int main(){
int pipe_fd[2];//one for read ,one for write
pid_t pid;
int num;
if(pipe(pipe_fd)<0){
perror("fail to pipe");
return -1;
}
else{
printf("pipe create");
}
pid=fork();
if(pid==0){ //child process
printf("\n");
close(pipe_fd[1]);
sleep(2);
if((num=(read(pipe_fd[0],buf,100))>0))
printf("read %d bytes from pipe they are %s",num,buf);
close(pipe_fd[0]);
exit(0);
}
else if(pid>0){//parent process
printf("\n");
close(pipe_fd[0]);
sleep(2);
num=write(pipe_fd[1],"hello world",100);
if(num<0)
perror("fail to write");
else if(num!=strlen(buf)-1)
printf("bytes lost\n");
close(pipe_fd[1]);
sleep(3);
waitpid(pid,NULL,0);
exit(0);
}
return 0;
}
管道通信不是双工的,所以读写不能同时进行