日期:2014-05-16  浏览次数:20724 次

请教关于共享内存函数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对象的地址,通过描述符可以
很方便的查找到对象。