目录
System V IPC分类
key_t 键和ftok函数
ipc_perm结构
创建和打开IPC通道
IPC权限问题
理解IPC工作原理
System V IPC分类
- System V 消息队列
- System V 共享内存
- System V 信号量
之所以称为System V IPC是因为这三种IPC机制都是来源于System V Unix的实现。
消息队列 | 信号量 | 共享内存 | |
---|---|---|---|
头文件 | <sys/msg.h> | <sys/sem.h> | <sys/shm.h> |
创建或者打开IPC函数 | msgget | semget | shmget |
控制IPC操作函数 | msgctl | semctl | shmctl |
IPC操作函数 | msgsnd/msgrcv | semop | shmat/shmdt |
key_t 键和ftok函数
ipc_perm结构
内核给每一个IPC对象维护一个信息表,其内容跟内核给文件维护的信息类似。
struct ipc_perm {
key_t __key; /* Key supplied to msgget(2) */
uid_t uid; /* Effective UID of owner */
gid_t gid; /* Effective GID of owner */
uid_t cuid; /* Effective UID of creator */
gid_t cgid; /* Effective GID of creator */
unsigned short mode; /* Permissions */
unsigned short __seq; /* Sequence number */
};
该结构体以及System V IPC函数使用的较为明显的常值定义在<sys/ipc.h>
头文件中。
创建和打开IPC通道
oflag | key不存在 | key已存在 |
---|---|---|
无特殊标志 | 出错 errno=ENOENT | 成功,引用存在对象 |
IPC_CREAT | 成功,创建IPC对象 | 成功,引用存在对象 |
IPC_CREAT or IPC_EXCL | 成功,创建IPC对象 | 失败, errno= EEXIST |
注意: IPC创建了自己的IPC_XX常值,不同于open函数的O_CREAT和O_EXCL.
IPC权限问题
每当一个进程访问某个IPC对象时,IPC就执行两次检查,该IPC被打开时检查一次,以后每使用对象就检查一次。
以上内容参考来源:http://t.csdn.cn/grlEl
理解IPC工作原理
xxxid_ds结构体中,第一个成员变量就是ipc_perm结构体,剩下才是相应的不同属性!
在C语言中,通过“基类”结构体指针 配上标识记录的派生类类型,在调用特定对象的时候,将该“基类”指针强转成特定对象的指针类型,进而可以识别出不同的对象类型!
这就是面向对象中的继承与多态!