当前位置:网站首页 > 技术博客 > 正文

信捷编程软件指令详解



System V IPC分为三种:

  • System V消息队列
  • System V信号量
  • System V共享内存区

这三种类型的IPC使用key_t值做为它们的名字。key_t这个数据类型在<sys/types.h>有定义,通常是一个至少32位的整数。

我们通常使用ftok()函数(可以如此记忆:file to key)把一个已存在的路径名和一个整数标识符转换成一个key_t值,称为IPC键。(当然,我们也可以不用ftok函数来生成该键,指定一个整数也是可以的,当然你需要考虑键的正负问题)。

看下ftok的声明:

 

pathname 通常是跟本应用用关的目录;proj_id指的是本应用所用到的IPC的一个序列号;成功返回IPC键,失败返回-1;

注:两进程如在pathname和proj_id上达成一致(或约定好),双方就都能够通过调用ftok函数得到同一个IPC键。

那么ftok是怎么实现的呢?《UNIX网络编程》上讲到,ftok的实现是组合了三个值:

  • pathname所在文件系统的信息(stat结构的st_dev成员)
  • pathname在本文件系统内的索引节点号(stat结构的st_ino成员)
  • id的低序8位(不能为0)

具体如何组合的,根据系统实现而不同。

使用ftok()需要注意的问题:

 

  • pathname指定的目录(文件)必须真实存在且调用进程可访问,否则ftok返回-1;
  • pathname指定的目录(文件)不能在程序运行期间删除或创建。因为文件每次创建时由系统赋予的索引节点可能不一样。这样一来,通过同一个pathname与proj_id就不能保证生成同一个IPC键。

附:文件属性结构

 

获取文件属性的函数有如下几个:

 

 

下面通过例子来看一下如何获取:

 

编译并执行输出:

$ gcc -o getstat main.c

$ https://blog.csdn.net/oNelson123/article/details/getstat

文件所在设备编号:2051

文件所在文件系统索引:

文件的类型和存取的权限:33188

连到该文件的硬连接数目:1

文件所有者的用户识别码:502

文件所有者的组识别码:503

装置设备文件:0

文件大小:1210

文件系统的I/O缓冲区大小:4096

占用文件区块的个数(每一区块大小为512个字节):8

文件最近一次被存取或被执行的时间:

文件最后一次被修改的时间:

最近一次被更改的时间:

 

2011-11-11  任洪彩  

转载请注明出处。

  • 上一篇: se
  • 下一篇: 线程同步原理
  • 版权声明


    相关文章:

  • se2025-04-16 21:30:06
  • sqlsugar官方文档2025-04-16 21:30:06
  • 跳表和树2025-04-16 21:30:06
  • 怎么连接服务器远程桌面2025-04-16 21:30:06
  • 2021免费dns2025-04-16 21:30:06
  • 线程同步原理2025-04-16 21:30:06
  • libxml xpath2025-04-16 21:30:06
  • jvm调优工具及使用2025-04-16 21:30:06
  • 监控jvm工具2025-04-16 21:30:06
  • udp编程实例2025-04-16 21:30:06