UNIX系统存在信号、匿名管道和命名管道等基本进程间通信机制。System V引入了三种高级进程间通信机制:消息队列、共享内存、信号量,称为IPC对象。IPC对象存在于内核中而不是文件系统中,由用户控制释放(用户管理IPC对象的生命周期,如果用户不释放IPC对象,则IPC对象存在于内核运行的所有周期内,除非开机重启),不像管道的释放由内核自动控制。
IPC对象通过其标识符来引用和访问,所有IPC对象在内核空间中有唯一性标识ID,在用户空间中的唯一性标识称为key。Linux IPC继承了System V IPC。
System V IPC对象的访问>IPC对象是全局对象,可用ipcs,ipcrm等命令查看或删除;
>每个IPC对象都由get函数创建:msgget、shmget、semget,调用get函数时必须指定关键字key。IPC 对象的权限和所有者结构体:
struct ipc_perm
{
key_t key;
ushort uid; /* owner euid and egid */
ushort gid;
ushort cuid; /* creator euid and egid */
ushort cgid;
ushort mode; /* access modes see mode flags below */
ushort seq; /* slot usage sequence number */
};