key_t键

System V IPC使用key_t值作为它们的名字,在Redhat linux(后续验证默认都在该平台下)下key_t被定义为int类型,追溯如下:

/usr/include/sys/ipc.h

#ifndef __key_t_defined

typedef __key_t key_t;

#define __key_t_defined

#endif

/usr/include/bits/types.h

typedef __DADDR_T_TYPE __daddr_t; /* The type of a disk address.  */
typedef __SWBLK_T_TYPE __swblk_t; /* Type of a swap block maybe?  */
typedef __KEY_T_TYPE __key_t;   /* Type of an IPC key */

/usr/include/bits/typesizes.h

#define __KEY_T_TYPE              __S32_TYPE

/usr/include/bits/types.h

#define       __S32_TYPE              int

ftok函数

  函数ftok把一个已存在的路径名和一个整数标识得转换成一个key_t值,称为IPC键:

# include
       # include

key_t ftok(const char *pathname, int proj_id);

DESCRIPTION
       The ftok function uses the identity of the  file  named  by  the  given pathname  (which  must  refer  to an existing, accessible file) and the least significant 8 bits of proj_id (which must be nonzero) to generate  a  key_t  type  System  V  IPC  key。

该函数把从pathname导出的信息与id的低序8位组合成一个整数IPC键。

sample:

  #include        "unpipc.h"

int main(int argc, char **argv)
  {
        struct stat     stat;

if (argc != 2)
                err_quit("usage: ftok ");

Stat(argv[1], &stat);
        printf("st_dev: %lx, st_ino: %lx, key: %x/n",
              (u_long) stat.st_dev,(u_long) stat.st_ino,
              Ftok(argv[1], 0x57));

exit(0);
  }

程序运行结果:

      [cbs@linux svipc]$ ./ftok  /tmp/mysql.sock
     st_dev: 802, st_ino: 34219, key: 57024219

ftok的典型实现调用stat函数,然后组合以下三个值:
1.pathname所在的文件系统的信息(stat结构的st_dev成员)
2.该文件在本文件系统内的索引节点号(stat结构的st_ino成员)
3. proj_id的低序8位(不能为0)
从程序运行的结果可以看出,ftok调用返回的整数IPC键由proj_id的低序8位,st_dev成员的低序8位,st_info的低序16位组合而成。
 
不能保证两个不同的路径名与同一个proj_id的组合产生不同的键,因为上面所列三个条目(文件系统标识符、索引节点、proj_id)中的信息位数可能大于一个整数的信息位数。

key_t键和ftok函数(转)相关推荐

  1. key_t键和ftok函数

    目录 `key_t键`.`ftok函数` key_t键.ftok函数 key_t ftok(const char *pathname, int proj_id); 功能:通过ftok返回的是根据文件( ...

  2. 【IPC通信】key_t键和ftok函数

    System V IPC分为三种: System V消息队列 System V信号量 System V共享内存区 这三种类型的IPC使用key_t值做为它们的名字.key_t这个数据类型在<sy ...

  3. key_t IPC键和ftok函数详解和剖析

    统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, int id ) fn ...

  4. ftok()函数解析

    ftok 消息队列.信号灯.共享内存常用在Linux服务端编程的进程间通信环境中.而此三类编程函数在实际项目中都是用System V IPC函数实现的.System V IPC函数名称和说明如下表15 ...

  5. ftok() 函数讲解 获取内核键值

    ftok() 函数之获取消息队列的键值 1.概述: 系统建立IPC通讯(消息队列.信号量和共享内存)时必须指定一个ID值,通常情况下,该ID值通过ftok函数得到. 2.原型: #include &l ...

  6. linux C -- ftok函数

    链接: linux C学习目录 原文链接:https://blog.csdn.net/u013485792/article/details/50764224 关于ftok函数,先不去了解它的作用来先说 ...

  7. ftok函数的作用:

    ftok函数的作用: 系统建立IPC通讯(如消息队列.共享内存时)必须指定一个ID值.通常情况下,该id值通过ftok函数得到. ftok原型如下: key_t ftok( char * fname, ...

  8. ftok()函数的使用

    在上一篇文章中,Mayuyu讲述了共享内存的原理以及使用方法.在创建共享内存之前,必须指定一个ID值,而这个ID值通常是通过现在要讲的ftok()函数得到.ftok()函数原型如下 其中参数fname ...

  9. ftok函数的key值是如何产生的

    函数原型  key_t    ftok(const char *pathname, int proj_id) 函数作用 返回一个key值,这个键值是唯一的,可以用它来识别文件,作为文件的身份证号.之后 ...

最新文章

  1. JDBC操作数据库实例
  2. jQuery 性能优化技巧
  3. iview area 遇到的坑
  4. 通过阅读 Douglas Crockford 的源码学习如何写 JSON parser(一)
  5. ga tsp matlab,遗传算法(GA)求解TSP问题MATLAB程序
  6. R语言学习笔记(三)多元数据的数据特征、相关分析与图形表示
  7. 如何教女朋友学 Python?
  8. delphi 判断两个时间差是否在一个指定范围内
  9. JS 新浪API获取IP归属地
  10. imx8mq - bootloader编译过程
  11. SOFA Weekly | Committer 聊天室、SOFAJRaft 本周发布、新手任务
  12. turtle递归作图绘制谢尔宾斯基地毯【详解】
  13. 智商一般学计算机,IQ最高的十大专业公布 智商不高慎选
  14. 互联网寒冬!一线互联网移动架构师筑基必备技能之Java篇,附带学习经验
  15. 提高医疗信息化或是解决看病难看病贵的有效助剂
  16. SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面试读版
  17. 计算机视觉图像处理入门
  18. 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置
  19. 岛屿问题和昆虫越障问题以及岛屿最大面积
  20. Android中使用Volley开源库进行Http网络请求(GET方式)

热门文章

  1. Nehe教程16课雾
  2. 毛毛雨 2007-11
  3. JAVA如何开发订单通知短信
  4. 最美的时间你遇见了谁
  5. 文樾杰出五金交电进销存管理系统 v6.12 下载
  6. 【软件工程】 软件工程及开发模型
  7. (二十五)各向同性张量(函数)
  8. DoEvents的用法
  9. 数值分析——自适应辛普森积分
  10. 网友自制 MIUI 13 海报被疯传