管道通信pipe()的使用程序

管道通信:要在新建子进程前建立管道,这样才能使父进程和子进程使用该管道通信

先: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;
}
~                                                                                                                                                                                       
~        

猜你喜欢

转载自blog.csdn.net/cxyzyywoaini/article/details/87301723