ftok() 函数之获取消息队列的键值
1、概述:
系统建立IPC通讯(消息队列、信号量和共享内存)时必须指定一个ID值,通常情况下,该ID值通过ftok函数得到。
2、原型:
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);
2、参数说明:
pathname : 就是你指定文件名(存在的文件),一般使用当前目录用(.)
id : 是子序号即ID ,虽然是int 类型,但只是用8bite(1-255)
3、产生键值说明
key = ftok(“.”,1);这样设置为当前目录,也就是文件的索引节点号配合子序号生成一个key值。
路径名使用路径的索引节点(.)
可以用ls –I 查看当前文件子序号ID
ls -a 查看当前文件索引节点号(.)
ls -ai 配合使用查看文件的键值
如:指定文件索引节点号6538,换上成16进制为0x010002,而你指定的ID值为38,换算16进制为0x26,后生成key_t返回值为0x26010002。
demo:
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
int main()
{
// key_t ftok(const char *pathname, int proj_id);
key_t key;
key = ftok(".",666);
printf("key=%d\n",key);
system("pause");
return 0;
}
运行结果:
CLC@Embed_Learn:~$ gcc ftok.c
CLC@Embed_Learn:~$ ./a.out
key=-1710924874
sh: 1: pause: not found