产生ftok()键的公式是什么?

时间:2019-02-02 11:54:31

标签: c linux sysv-ipc ftok

用于产生ftok()产生的密钥的公式是什么? ftok是用于为SYSTEM V IPC创建密钥的Linux功能。

2 个答案:

答案 0 :(得分:3)

ftok from glibc 2.29中:

key_t
ftok (const char *pathname, int proj_id)
{
  struct stat64 st;
  key_t key;

  if (__xstat64 (_STAT_VER, pathname, &st) < 0)
    return (key_t) -1;

  key = ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16)
     | ((proj_id & 0xff) << 24));

  return key;
}

即它通过从key_t的低8位中取高8位,从提供的{{1}的设备号的低8位中取第二高8位,来创建32位proj_id },以及所提供的pathname的inode编号的低16位中的低16位。

musl libc使用相同的算法:

pathname

答案 1 :(得分:0)

glibc库中的ftok()源代码是:

#include <sys/ipc.h>
#include <sys/stat.h>
key_t
ftok (const char *pathname, int proj_id)
{
  struct stat64 st;
  key_t key;
  if (__xstat64 (_STAT_VER, pathname, &st) < 0)
    return (key_t) -1;
  key = ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16)
         | ((proj_id & 0xff) << 24));
  return key;
}

here也可以使用其他功能。