在IPC通讯(如共享内存、消息队列)时,都必须指定唯一的一个key值,为了避免key值重复,利用一个函数ftok来生成相应key值。
ftok原型如下:key_t ftok( char * fname, int id );
fname就时你指定的文件名(该文件必须存在且可以访问),id是子序号,虽然为int,但是只有最后8位被使用(0-255)。当成功执行的时候,一个key_t值将会被返回,否则返回-1。
在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16进制为 0x010002,而你指定的ID值为38,换算成16进制为0x26,则最后的key_t返回值0x26010002。
由于系统中的每一个文件都有一个唯一的inode节点,都有唯一的一个值,所以利用它来生成一个唯一的key值。注意它和文件的内容是无关的。ftok根据路径名,提取inode号,再根据proj_id,合成key。因此,该路径是必须存在的,但proj_id是可以根据自己的约定,随意设置。比如:我们在开发一个项目的时候,有可能不同人需要在同一个路径下编写代码,防止大家不小心使用了相同的key,一般项目经理会分配给每个人不同的proj_t ,这个时候就可以用当前路径pathname和proj_t生成所需的key。
作者:lfyaa 发表于2013-8-29 18:57:21 原文链接
阅读:47 评论:0 查看评论