返回
Featured image of post 操作系统 —— 进程间通信之管道

操作系统 —— 进程间通信之管道

管道

  • 管道的局限性
    • 半双工:数据只能在一个方向上流动;
    • 只能在具有共同祖先的两个进程间使用。

1. 管道创建

  • 相关函数
#include <unistd.h>

int pipe(int fd[2]);
  • fd[0]为读而打开;

  • fd[1]为写而打开;

  • fd[1]的输出是fd[0]的输入;【?!】

  • PIPE_BUF规定内核的管道缓冲区的大小。

    • pathconffpathconf可以确定 PIPE_BUF 的值。
  • 当管道的一端被关闭后,适用的规则:

    • 当读 (read) 一个写端被关闭的管道,在所有数据被读取后,read 返回 0;
    • 当写 (write) 一个读端被关闭的管道,则产生信号SIGPIPE
      • 忽略/捕捉信号并从信号处理程序返回后,write 返回 -1,errno=EPIPE。

A. 疑问

  • fd[1]的输出是fd[0]的输入?
  • 多个进程使用相同的fd[2]的时候,管道的读写是怎么样的?
    • 管道是多个进程共用的,谁都可以写,也都可以读。因此写入/读取的信息可能混杂在一起。
    • 详见示例:3_ex_read_and_write.c
相信美好的事情即将发生。
Built with Hugo
Theme Stack designed by Jimmy