我正在使用ftok()
创建共享存储密钥。我想创建500个共享存储密钥。根据ftok()
的手册页,提到低8位是重要的。
这是否意味着我们最多只能生成256个共享内存密钥? 如果是,那么如何生成256个以上的密钥?
因为参数ftok()
被定义为接受proj_id
的int参数:-
key_t ftok(const char *pathname, int proj_id);
因此,它应该生成2^0
至2^31
具有相同路径名的唯一密钥。
答案 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命名的文件并用相同名称重新创建之后再次调用时返回相同的键值。
但是,正如其他人在评论中指出的那样,建议创建这么多进程是不明智的。