管道
管道是通过pipe函数创建, fd[0]用于读, fd[1]用于写.
#include <unistd.h>
int pipe(int fd[2]);
具有以下限制:
FIFO
也被称为命名管道, 可以不止在父子进程中使用.
#include <sys/stat.h>
int mkfifo(const char* path, mode_t mode);
int mkfifioat(int fd, const char* path, mode_t mode);
FIFO常用于C/S模型, FIFO作为汇聚点, 在C/S进程时间传递消息.
消息队列
相比较FIFO, 消息队列有以下优点:
信号量
他是一个计数器, 用于为多个进程提供共享数据对象的访问.
共享存储
允许多个进程共享一个给定的存储区, 因为数据不需要在进程之间复制, 所以这是一种最快的IPC.
需要使用信号量来互斥的对共享存储进行访问.
多个进程可以将同一个文件映射到他们的地址空间从而实现共享内存. 另外XSI共享内存不是使用文件, 而是使用内存的匿名段.
套接字
和其他通信机制不同的是, 他可用于不同机器间的进程通信.