进程间通信---无名管道

请添加图片描述

无名管道和有名管道的区别:

无名管道只能用于父进程和子进程之间通信,而有名管道可以用于任意两个进程间通信

请添加图片描述

管道工作的原理:

请添加图片描述

切记:无名管道一旦创建完成后,操作无名管道等同于操作文件,无名管道的读端/写端 都被视作一个文件。请添加图片描述

请添加图片描述

读端为pipefd[0] ,写端为pipefd[1]

请添加图片描述
代码实例:







#include<stdio.h>
#include<unistd.h> 
#include <sys/wait.h>
#include <stdlib.h>
int main()
{
        pid_t pid = 0;
        int pipefd[2];
        char c_buf[10];

        /*2 创建管道 */
        pipe(pipefd);//注意pipe()函数的用法,函数调用后pipefd会被赋值。

        /*1   创建子进程*/
        pid = fork();

        if(pid >0){
                /*父进程写入数据*/
                write(pipefd[1],"hello",6);
                wait(NULL);// 等待子进程结束
                close(pipefd[1]);//关闭管道fd
                exit(0);//退出主进程
        }
        if(0 == pid){
                /*子进程读数据*/
                read(pipefd[0],c_buf,6);
                printf("child process read : %s\n", c_buf);
                close(pipefd[0]);
                exit(0);
        }
        return 0;
}
~                                                                                                                                                 
~                                                                                                                                                 
~                                                                                                                                                 
~                          

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值