在ipc通信中,系统v模式的ipc通信需要key值来生成对应的ID,那么key是如何生成的呢?通过函数ftok生成
# includesys/types.h # includesys/IPC.HKEY _ tft ok (const char * pathname,int proj_id ); 参数:
pathname:传递路径。 通常是当前路径“.”。
proj_id :填写任意数量。 (要进行通信,通信的另一端必须与此数量匹配才能找到对应的icpID ) ) ) ) ) )。
返回值:生成唯一的数字
具体怎么生成?
key 31-24 proj_id后8位
key 23-16 pathname的st_dev属性的低8位
key 15-0 pathname的st_ino属性的后16位
32位组合的int值是ftok的返回值
demo # includesys/IPC.h # include stdio.h # includesys/stat.h # include stdlib.hint main (int argc,char *argv[] int i; 结构启动缓冲区; if(argc!=3) printf (use : commandpathnumber (n ); 返回1; (I=atoi ) argv[2]; if () stat ) argv[1],buf )=-1 ) {perror(‘stat’}; exit(exit_failure; }printf(fileST_dev=0x%x(n ),buf.st_dev ); printf(fileST_ino=0x%x(n ),buf.st_ino ); printf(number=0x%x(n ),I ); ky=Ftok(argv[1],I ); 使用printf(key=0x%x(tkey24=%x ) tkey0xffff=%x ) t ) key16 )0xff=%x(n )、key、key24、key0xffff、)效果