msqid
为消息队列的标识符,msgp
为消息缓冲区指针,msgsz
为消息长度,msgtyp
为消息类型,msgflg
为接收标志。errno
。++
和- -
不是原子的进程申请信号量一旦成功:就一定有这个进程的资源了(相当于去看电影买票,一定有我们的座位了,而且别人也买不了这个座位) 当我们释放信号量后,这份资源才能给别人(看完电影后,这个座位才能接着被下一个买) 申请信号量和释放信号量来保护临界资源, 是大家都要遵守的规则(我们程序员)
==>
信号量本身就是共享资源内核中,所有的描述管理IPC资源的结构体,第一个成员大家都一样 kern_ipc_perm。我们可以用指针数组来进行管理
在内核中,对IPC资源的管理也是转变为对数组的增删查改
类型不同我们怎么解决呢?——直接强转
那怎么知道是什么类型呢?
kern_ipc_perm里有一个有个mode变量,能来表示类型
#define IPC TYPE SHM Ox1
#define IPC TYPE MSG (0x1<<1)
#define IPC TYPE SEM(0x1 << 2)//定义这三个宏后
shmid kernel* (kern ipc_perm* p)
{
if (p->mode & IPC TYPE SHM)
{
return (shmid kernel)ipc
}
else if (p->mode & IPC TYPE MSG)
{
///
}
else
{
///
}
}
好啦,我也是结束了实训,才到家!!!
感谢大家的支持