请教关于共享内存函数shmget的键值和id问题
int shmid shmget(key_t shm_key,int size,mode);在这个函数中,第一个参数键值和返回值id都是用来识别共享内存的标识的。一般来说,对象有一个标识就够了,为什么共享内存既要键值,又要id呢?
------解决方案--------------------可以这样解释吧,key_t对应的是ftok结构的一个hash值,或者称为索引,有了这个key_t,shmget创建相应IPC对象结构:
struct ipc_perm
{
key_t key; /* Key supplied to semget(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 */
};
显然通过key_t是可以定位这个结构的,但是是不是得查找,然后再比较才能确认?
如果这样还不如直接使用这个对象的地址,也就描述符来定位。
因此,key_t只是IPC对象结构的一个属性,而描述符可以认为是IPC对象的地址,通过描述符可以
很方便的查找到对象。