看这题目就很乱,心情当然也是不怎么美好了。前一段时间做了一个项目,AIX(Unix的一种)中的一个系统向WINDOWS移植,开发环境由IBM的C/C++(叫什么忘记了,好像是xlC)变为VC++。

这是算过来,但是最近进程通信的信号量出了问题(也不算什么问题,就是全局信号量的名字应该怎么命名有点问题了。)

AIX系统中,信号量的名字其实是key_s(本质就是int),key_s是通过ftok返回了。大概的逻辑就是指定一个系统中存在的文件,取文件的索引节点号的低24位,然后高8位使用偏移字段,

这样,同一个系统文件可以最多生成256个信号量名称。

但是WINDOWS这边没有,WINDOWS这么只需要指定一个字符串就可以了。但是字符串前缀可以是Golbal, Local, 无,三种情况,由于区分信号量是全局,本地,默认(本地)的。

然后我就使用文件名称(没有带路径)生成了一个信号量的名字,因为当时真的没有找到WINDOWS的文件索引节点号(压根没有这个概念,好吧我承认是被度娘骗的分文不剩)。

后来我领导这日本雅虎上确实找到了WINDOWS这边与之对应的概念,就是BY_HANDLE_FILE_INFORMATION,其实AIX存文件的时候,是使用设备号+文件号来存储的,而WINDOWS是

采用设备号+文件号高位+文件号地位来存储的,应该算的上是一种对应关系。(在WINDOWS这边也有IPC,但是里面的设备号和文件号都是0)

typedef struct _BY_HANDLE_FILE_INFORMATION {
DWORD    dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD    dwVolumeSerialNumber;
DWORD    nFileSizeHigh;
DWORD    nFileSizeLow;
DWORD    nNumberOfLinks;
DWORD    nFileIndexHigh;
DWORD    nFileIndexLow;
} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION; 加粗的就是定义了。使用这个就是可以通过3个DWORD(也可以理解是一种int)就可以唯一标识一个文件了。如果文件不存在,就是-1(在内存中是0xffffffff)。
而后需要解释的就是WINDOWS中的信号名称最好是“xxxx-xxxxxxxx-xxxxxxxxxxxxxxxx”(偏移-设备号-文件号)这种形式。
_BY_HANDLE_FILE_INFORMATION 的获取方式:
---- get fi ----
HANDLE h = INVALID_HANDLE_VALUE;
BY_HANDLE_FILE_INFORMATION fi;
h = CreateFile(path, 0, 0, NULL, OPEN_EXISTING, 0, NULL);
GetFileInformationByHandle(h, &fi);
---- get fi ----

最新文章

  1. 分布式系统理论进阶 - Paxos变种和优化
  2. 动手实验iptables的NAT功能实现流量穿透
  3. 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
  4. MAC OS VPN使用指南
  5. Microsoft.ReportViewer.WebForms, Version=10.0.0.0的报错问题,解决方案
  6. 浏览器Firefox新标签页默认打开地址设置
  7. mysql 常用操作(整理)
  8. dij算法为什么不能处理负权,以及dij算法变种
  9. Java获取系统相关信息System.getProperty()
  10. OC语言的特性(二)-Block
  11. 开始一个简单的ASP.NET Web API 2 (C#)
  12. jQuery 2
  13. 如何迁移 ArcGIS Enterprise WebGIS( Portal Server DataStore )系统
  14. 在Form Load中设置showInTaskBar =false 或 隐藏窗口 this.Hide()时会导致注册的全局快捷键无效
  15. ASP.NET Core 如何设置发布环境
  16. Atitit.软件GUI按钮与仪表盘--db数据库区--导入mysql sql错误的解决之道
  17. Wordpress 忘记密码怎么办?
  18. [转] Angular 4.0 内置指令全攻略
  19. ACM-ICPC北京赛区(2017)网络赛1【模拟+枚举+数组操作】
  20. Vue 父页面 值传递 不到 子组件....

热门文章

  1. 创建 git仓库
  2. 解决Linux关闭终端(关闭SSH等)后运行的程序或者服务自动停止【后台运行程序】
  3. TMS320F28335项目开发记录1_CCS的使用介绍
  4. C#开发微信公众平台-就这么简单(转载)
  5. Linux学习笔记 (八)Shell概述
  6. 网页视频播放方案chimee 组件使用
  7. Linux-信号详解
  8. msbuild,Build failed with Error MSB3073 exited with code 1
  9. Centos开机自己主动挂载windows中的ntfs磁盘
  10. VirtualBox 調整硬盤大小