管道 pipes
定义
管道是内核中的一个缓冲区,以 FD 对的形式暴露给进程:
p[0]:读取端 (read end)p[1]:写入端 (write end)
核心机制
- 单向性:数据从
p[1]流向p[0]。 - 阻塞特性:
- 缓冲区满时,
write阻塞。 - 缓冲区空时,
read阻塞。
- 缓冲区满时,
- 管道关闭:当所有指向写入端的 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);
}