该系列文章为《Linux/Unix系统编程手册》的学习笔记,由于该书太过冗长,属于工具书的类别,这里对书中的一些核心内容加以提炼和整理。 书中的编程练习这里不做展示和说明。
这里一张图可以对UNIX系统上所有的IPC工具有一个大概的认识。
- 数据传输工具:有写入和读取的概念,这些工具在用户内存与内核内存之间存在两次数据传输,一次调用
write()
系统调用从用户内存到内核内存,一次调用read()
从内核内存到用户内存。 - 共享内存:内核通过将每个进程中的页条目指向同一个RAM分页来实现共享内存。
- 管道、FIFO以及socket是使用文件描述符实现的,因此可以借助I/O多路复用、信号驱动I/O以及Linux特有的epoll API来判断是否可以在某些文件描述符上执行I/O操作。
- IPC工具有自己的权限模型,一些工具(如FIFO、socket)位于文件系统中,其权限模型是文件权限掩码。另一些工具(如管道、匿名内存映射)只允许相关进程访问,即调用
fork
。
(End)