使用共享内存时,为什么要关心创建密钥
key_t ftok(const char *path, int id);
在下面的代码中?
key_t key;
int shmid;
key = ftok("/home/beej/somefile3", 'R');
shmid = shmget(key, 1024, 0644 | IPC_CREAT);
据我了解,访问给定共享内存所需的是shmid
,而不是关键。还是我错了?如果我们需要的是shmid
,那么不只是每次都创建一个随机密钥有什么意义呢?
编辑
@Beej的 Unix IPC 指南可以阅读:
这种
key
胡说八道怎么办?我们如何创建一个?好吧,因为类型key_t
实际上只是 along
,所以你可以使用任何你想要的数字。但是,如果您对号码进行硬编码,而其他一些不相关的程序硬编码相同的号码但想要另一个队列怎么办?解决方案是使用ftok()
从两个参数生成密钥的函数。
读到这里,给我的印象是,需要附加到共享内存块上的是关键。但这不是真的,不是吗?