读书人

关于应用ftok函数生成IPC通信所需key值

发布时间: 2013-09-05 16:02:07 作者: rapoo

关于使用ftok函数生成IPC通信所需key值的个人理解

在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。

读书人网 >其他相关

热点推荐