山东响应式网站建设,南宁企业做网站,深圳网站网络建设,重庆手机微信网站建设看这题目就很乱#xff0c;心情当然也是不怎么美好了。前一段时间做了一个项目#xff0c;AIX(Unix的一种#xff09;中的一个系统向WINDOWS移植#xff0c;开发环境由IBM的C/C(叫什么忘记了#xff0c;好像是xlC)变为VC。 这是算过来#xff0c;但是最近进程通信的信号量…看这题目就很乱心情当然也是不怎么美好了。前一段时间做了一个项目AIX(Unix的一种中的一个系统向WINDOWS移植开发环境由IBM的C/C(叫什么忘记了好像是xlC)变为VC。 这是算过来但是最近进程通信的信号量出了问题也不算什么问题就是全局信号量的名字应该怎么命名有点问题了。 AIX系统中信号量的名字其实是key_s本质就是intkey_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 ----转载于:https://www.cnblogs.com/ys0103/p/4991310.html