看这题目就很乱,心情当然也是不怎么美好了。前一段时间做了一个项目,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 ----

window linux IPC ftok BY_HANDLE_FILE_INFORMATION的更多相关文章

  1. linux ipc/its

    linux进程间双向消息队列 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> ...

  2. Linux IPC实践(1) -- 概述

    进程的同步与互斥 进程同步: 多个进程需要相互配合共同完成一项任务. 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些 ...

  3. Linux IPC之共享内存C 事例

    Linux IPC之共享内存 标签: linuxrandomnull工作 2011-08-25 11:52 4123人阅读 评论(0) 收藏 举报  分类: Linux(3)  读书札记(3)  版权 ...

  4. Linux IPC System V 共享内存

    模型 #include<sys/types.h> #include<sys/ipc.h> #include<sys/shm.h> ftok() //获取key值 s ...

  5. Linux IPC实践(11) --System V信号量(1)

    信号量API #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget ...

  6. Linux IPC基础(System V)

    简介 IPC 主要有消息队列.信号量和共享内存3种机制.和文件一样,IPC 在使用前必须先创建,使用 ipcs 命令可以查看当前系统正在使用的 IPC 工具: 由以上可以看出,一个 IPC 至少包含 ...

  7. linux IPC简单学习

    Posix和system v区别 所谓的IPC(进程间通信)指的是消息队列,共享内存,信号量3种机制合并起来,当然,这是个狭义的概念,只包含这三种.IPC又可以分为system v进程间通信和posi ...

  8. linux IPC 消息队列

    消息队列函数原型 在建立IPC通讯时(如消息队列,共享内存)必须建立一个ID值.通常情况下,这个ID值由ftok函数得到 #inlcude <sys/types.h> #include & ...

  9. Linux IPC System V 信号量

    模型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> ftok() //获取key ...

随机推荐

  1. 【RabbitMQ 参考资料】

    RabbitMQ从入门到精通:http://blog.csdn.net/column/details/rabbitmq.html RabbitMQ消息队列(一): Detailed Introduct ...

  2. Java虚拟机中的栈和堆的定义和区别

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...

  3. REOBJECT structure

    REOBJECT structure   包含丰富编辑控件中的OLE或图像对象的信息. Syntax 语法 typedef struct _reobject { DWORD cbStruct; LON ...

  4. 正则表达式表示 ja.resx 所在行

    [^\n]*ja.resx[^\n]*\n?正则表达式表示 ja.resx 所在行 用ultraEdit 删除关键字所在行的下一行或是上一行,所在行保留 删除 关键字所在行 的前3行: (^.*?(\ ...

  5. docker实战——构建Jekyll

    构建第一个应用 要构建的第一个应用是Jekyll框架的自定义网站.我们会构建一下两个镜像. 一个镜像安装Jekyll以及其他用于构建Jekyll网站的必要的软件包. 一个镜像通过Apache来让Jek ...

  6. 记录一个奇妙的Bug, -1 &gt;= 2 ?

    直接上代码: #include <iostream> #include <vector> using namespace std; int main() { vector< ...

  7. 使用 原生js 制作插件 (javaScript音乐播放器)

    1.引用页面 index.html <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  8. Andrew Ng机器学习课程6

    Andrew Ng机器学习课程6 说明 在前面尾随者台大机器学习基石课程和机器学习技法课程的设置,对机器学习所涉及到的大部分的知识有了一个较为全面的了解,可是对于没有动手敲代码并加以使用的情况,基本上 ...

  9. 用Jmeter测试RabbitMQ

    1.下载AMQP插件 github上面有源码,可以通过ant+ivy在本地进行打包(下载IDEA实践成功) https://github.com/jlavallee/JMeter-Rabbit-AMQ ...

  10. Android WebView 开发具体解释(三)

    转载请注明出处   http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...