用于产生ftok()产生的密钥的公式是什么? ftok是用于为SYSTEM V IPC创建密钥的Linux功能。
答案 0 :(得分:3)
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也可以使用其他功能。