首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

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

2013-09-05 
关于使用ftok函数生成IPC通信所需key值的个人理解在IPC通讯(如共享内存、消息队列)时,都必须指定唯一的一个

关于使用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。

热点排行