管道通信:要在新建子进程前建立管道,这样才能使父进程和子进程使用该管道通信
先:pipe(fd);
后:pid=fork();
在建立管道和子进程的时候要判断一下这两个命令有没有运行成功!
#include<string.h>
#include<stdio.h>
#include<sys/types.h>
#include<errno.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main(){
int fd[2];
pid_t pid;
char buf[100];
memset(buf,0,100); //清空buf[]数组的内容,防止其他残留数据的影响
if(pipe(fd)<0){
printf("pipe error\n");
exit(0);
}
printf("fd[0]=%d,fd[1]=%d\n",fd[0],fd[1]);
pid=fork();
if(pid==0){
close(fd[1]); //关闭子进程的写入端
while(1){
if(read(fd[0],buf,1)>0){
if(buf[0]%3==0&&buf[0]!=0) //判断buf[0]是否是3的倍数
printf("%d\n",buf[0]);
if(buf[0]==10) exit(0);
}
}
close(fd[0]); //关闭子进程的读取端
}
else{
close(fd[0]); //关闭父进程的读取端
for(buf[0]=0;buf[0]<=10;buf[0]++){
write(fd[1],buf,1); //往管道内写入数据
//sleep(2);
}
close(fd[1]); //关闭父进程的写入端
wait(NULL);
}
return 0;
}
~
~