System V IPC
System V IPC指的是AT&T在System V.2发行版中引入的三种进程间通信工具:(1)信号量,用来管理对共享资源的访问 (2)共享内存,用来高效地实现进程间的数据共享 (3)消息队列,用来实现进程间数据的传递。我们把这三种工具统称为System V IPC的对象,每个对象都具有一个唯一的IPC标识符(identifier)。要保证不同的进程能够获取同一个IPC对象,必须提供一个IPC关键字(IPC key),内核负责把IPC关键字转换成IPC标识符。
System V IPC具有相似的语法,一般操作如下:
(1)选择IPC关键字,可以使用如下三种方式:
a)IPC_PRIVATE。由内核负责选择一个关键字然后生成一个IPC对象并把IPC标识符直接传递给另一个进程。
b)直接选择一个关键字。
c)使用ftok()函数生成一个关键字。
(2)使用semget()/shmget()/msgget()函数根据IPC关键字key和一个标志flag创建或访问IPC对象。如果key是IPC_PRIVATE;或者key尚未与已经存在的IPC对象相关联且flag中包含IPC_CREAT标志,那么就会创建一个全新的IPC对象。
(3)使用semctl()/shmctl()/msgctl()函数修改IPC对象的属性。
(4)使用semctl()/shmctl()/msgctl()函数和IPC_RMID标志销毁IPC实例。
System V IPC为每个IPC对象设置了一个ipc_perm结构体并在创建IPC对象的时候进行初始化。这个结构体中定义了IPC对象的访问权限和所有者:
struct ipc_perm{
uid_t uid; //所有者的用户id
gid_t gid; //所有者的组id
uid_t cuid; //创建者的用户id
gid_t cgid; //创建者的组id
mode_t mode; //访问模式
…
};
shell中管理IPC对象的命令是ipcs、ipcmk和ipcrm。
http://www.cnblogs.com/wangkangluo1/archive/2012/05/14/2498786.html