在Linux中使用ftok()可以创建多少个最大共享内存密钥?

时间:2018-11-01 08:42:08

标签: c linux memory kernel ipc

我正在使用ftok()创建共享存储密钥。我想创建500个共享存储密钥。根据ftok()的手册页,提到低8位是重要的。

这是否意味着我们最多只能生成256个共享内存密钥? 如果是,那么如何生成256个以上的密钥?

因为参数ftok()被定义为接受proj_id的int参数:-

key_t ftok(const char *pathname, int proj_id);

因此,它应该生成2^02^31具有相同路径名的唯一密钥。

1 个答案:

答案 0 :(得分:0)

ftok可以创建的最大密钥数不受ftok的整数参数的限制。它也取决于整数参数和路径参数。即使仅int参数的低8位有效,理论上路径的数量也是无数的。

ftok返回的密钥是key_t类型的__S32_TYPE,它是int。因此,这可以从2^0 to 2^31有4个字节的实现中的int开始。

根据ftok的手册页:

  

对于ftok()函数,当使用相同的id值调用时,对于命名相同文件的所有路径,应返回相同的键值,;当使用不同的id值或路径调用时,应返回不同的键值。可以同时命名同一文件系统上存在的不同文件。未确定ftok()是否应在删除由path命名的文件并用相同名称重新创建之后再次调用时返回相同的键值。

但是,正如其他人在评论中指出的那样,建议创建这么多进程是不明智的。