ftok()函数

系统建立IPC通讯 (消息队列、信号量和共享内存) 时必须指定一个ID值。通常情况下,该id值通过ftok函数得到。 函数原型:key_t ftok( const char * fname, int id ); (id>0) fname就是你指定的文件名(已经存在的文件名),一般使用当前目录。

在一般的UNIX实现中,是将文件的索引节点号取出。(文件重建将会分配一个新的索引节点号) ftok 返回值组成:hex(id)&0xff03 hex(节点号)&0xffff。 传入的id低8位+0x03+ 节点号的低16位。(test on redhat ) 可通过 ls -l 查看文件节点值。

样例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>
#include <sys/ipc.h>

int main(int argc,char* argv[])
{
  if(argc!=2)
  {
      puts("usage: keyfile\n");
      return 0;
  }
   printf("%s\n",argv[0]);
   printf("ftok=0x%x\n",ftok(argv[1],1) );
   return 0;
}