在linux上使用ftok函数
1、函数作用:系统建立IPC通信,如消息队列、共享存储器,必须指定ID值。 此id值通常由ftok函数获得
2、函数原型:
#包含
#包含
key _ tft ok (常数char * pathname,int proj_id );
3、函数参数分析:
a、用于生成constchar*pathname:key_t值的文件名(文件必须存在)、
b、int proj_id:proj_id是子序列号,虽然是int,但仅使用了8位(0-255 )。
4 .返回值
如果成功执行,将返回key_t值。 否则,返回-1。
5、函数内部实现过程
在典型的UNIX实现中,检索文件的索引节点号,并在前面附加子号以获得key_t的返回值。
如果指定文件的索引节点编号为65538、换算为十六进制值为0x010002、指定的ID值为38,
如果用十六进制换算为0x26,则最后一个key_t的返回值为0x26010002。
注意:
1、要防止key_t的值发生变化,请不要删除ftok文档,或者不使用ftok指定固定的key_t值。
2、再说一句,aix等操作系统可能有多个文档系统,分布在不同文档系统上的两个文档可能有相同的索引节点编号。
此时,如果在ftok中处理两个文档,但id参数不更改,则得到的key_t值相同,消息队列创建失败。 但是,这是相当罕见的。
发现由于开发涉及许多系统平台,系统移植时ftok ) )函数在不同平台上存在一定的差异。
当然,根本原因应该不是ftok ()本身,而是操作系统在文件系统管理方面的差异化。
6、测试用例:
#包含
#包含
#包含
#包含
#包含
#包含
#包含
(intmain(intargc,char *argv[] ) ) ) ) ) ) ) ) ) ) )
{
key_t key
if(3!=argc )
{
printf (用户: ftok (n ) );
退出(1;
}
key=Ftok(argv[1],atoi ) argv[2] );
printf(key=%x(n ),key );
返回0;
}