管道通信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;
}
~                                                                                                                                                                                       
~        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值