《博学谷C++》四.1-6进程间通信

1.学习目标

  • 说出并理解管道的读写行为
  • 熟练使用pipe进行父子进程间通信
  • 熟练使用pipe进行兄弟进程间通信
  • 熟练使用fifo进行无血缘关系的进程间通信
  • 熟练掌握mmap函数的使用
  • 使用mmap进行有血缘关系的进程间通信
  • 使用mmap进行无血缘关系的进程间通信

进程间通信

不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( IPC:Inter Processes Communication )。

3.无名管道

1.特点

  1. 半双工,同一时刻只能一个方向流动

  2. 一端流入,一端流出

  3. 数据先入先出,FIFO

  4. 管道只是传输的介质,数据无格式

  5. 管道不是普通文件,只存在内存中

  6. 管道在内存中对应一个缓冲区,大小取决于系统

  7. 数据读取是一次性操作

  8. 管道没有名字,只能在具有公共祖先的进程(父子、兄弟进程)之间使用。

2.pipe函数

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <unistd.h>

int pipe(int pipefd[2]);
功能:创建无名管道。

参数:
pipefd : 为 int 型数组的首地址,其存放了管道的文件描述符 pipefd[0]、pipefd[1]。

当一个管道建立时,它会创建两个文件描述符 fd[0] 和 fd[1]。其中 fd[0] 固定用于读管道,而 fd[1] 固定用于写管道。一般文件 I/O的函数都可以用来操作管道(lseek() 除外)。

返回值:
成功:0
失败:-1