管道 pipes

定义

管道是内核中的一个缓冲区,以 FD 对的形式暴露给进程:

  • p[0]:读取端 (read end)
  • p[1]:写入端 (write end)

核心机制

  1. 单向性:数据从 p[1] 流向 p[0]
  2. 阻塞特性
    • 缓冲区满时,write 阻塞。
    • 缓冲区空时,read 阻塞。
  3. 管道关闭:当所有指向写入端的 FD 都关闭后,读取端的 read 将返回 0(EOF)。

代码范式 (Ping-Pong 实验核心)

int p[2];
pipe(p);
if(fork() == 0) {
    // 子进程逻辑
    close(p[1]); // 关掉不用的写端
    read(p[0], buf, n);
} else {
    // 父进程逻辑
    close(p[0]); // 关掉不用的读端
    write(p[1], data, n);
}