进程间通信之---管道

本文深入探讨了进程间通信的原因和方式,重点介绍了匿名管道和命名管道。匿名管道适用于有亲缘关系的进程,具有半双工、固定大小等特性;命名管道则支持不同进程间的通信,通过文件标识符找到内核缓冲区。文章通过实例代码展示了管道的创建、使用及属性设置,并解释了相关概念如原子性和阻塞属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1.匿名管道:

  • 1.管道符号

  • ps aux | grep xxx

  • 2.2 管道的本质

  • 管道在内核当中是块缓冲区, 供进程进行读写, 交换数据

  • 2.3管道的接口

    • 1.3.1理解参数的含义
    • int pipe(int pipefd[2]);

      • 作用:
        • 创建匿名管道:也就是在内核创建出来一个缓冲区
      • 参数:
        • 参数为出参,也就是pipe fd的值是p ipe函数进行填充的,调用者进行使用
        • pipefd是数组,有两个元素
        • pipefd[0] :管道的读端
        • pipefd[1] :管道的写端
      • 返回值:
        • 0:创建成功
        • -1:创建失败
  • 2.4从PCB的角度理解管道

  • 2.5代码验证

    • 2.5.1、验证pipe函数:创建一个管道

    • 程序运行输出3,4

    • 查看输出参数是否是文件描述符

    • 查看详细信息可以看到3,4分别对应管道的读端和写端

    • 我们测试一下看从fd[0]读,从fd[1]中写

    • 可以看到读写成功

    • 2.5.2、结合父子进程,让父子进程进行通信

    • 我们发现父子近进程通信成功

    • 现象解释:父子进程打开内核中管道缓冲区,子进程打开一个读端一个写端,父进程打开一个读端一个写端。子进程关闭自己读端还可以写入,但是不可以读了。父进程同理。
    • 2.5.3:接下来我们关闭子进程的写端,让子进程写入,父进程关闭读端,让父进程读取。

    • 我们发现父进程无法读取内容

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月半木斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值