用于生成ftok()生成的键的公式是什么?ftok是一个linux函数,用于为system v ipc创建密钥。
最佳答案
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位,从所提供的proj_id
的设备号的较低8位中获取第二个较高的8位,从所提供的pathname
的inode号的较低16位中获取较低的16位来创建32位pathname
。musl libc使用相同的算法:
key_t ftok(const char *path, int id)
{
struct stat st;
if (stat(path, &st) < 0) return -1;
return ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16) | ((id & 0xffu) << 24));
}