看这题目就很乱,心情当然也是不怎么美好了。前一段时间做了一个项目,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. 《linux 内核全然剖析》 chapter 4 80x86 保护模式极其编程

    80x86 保护模式极其编程       首先我不得不说.看这章真的非常纠结...看了半天.不知道这个东西能干嘛.我感觉唯一有点用的就是对于内存映射的理解...我假设不在底层给80x86写汇编的话.我 ...

  2. rundll32.exe的相关使用语句

    命令列: rundll32.exe shell32.dll,Control_RunDLL 功能: 显示控制面板 命令列: rundll32.exe shell32.dll,Control_RunDLL ...

  3. Linux Bash严重漏洞修复方法

    日前Linux官方内置Bash中新发现一个非常严重安全漏洞,黑客可以利用该Bash漏洞完全控制目标系统并发起攻击,为了避免Linux服务器受影响,就要尽快修补该漏洞了.(漏洞参考https://acc ...

  4. [Python爬虫] 之二十三:Selenium +phantomjs 利用 pyquery抓取智能电视网数据

    一.介绍 本例子用Selenium +phantomjs爬取智能电视网(http://news.znds.com/article/news/)的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字 ...

  5. Windows下搭建基于SSH的Git服务器

    Git客户端安装 客户端要同时安装在远程服务器和自己的电脑上,下载地址:http://msysgit.github.io/ 选择安装组件 :也可以默认选择; 图标组件(Addition icons) ...

  6. Windows下pip安装scipy报错no lapack/blas resources found

    Windows下升级了pandas,但是发现scipy包随后引用出错,后来确认需重新安装scipy, 在用pip安装scipy出现no lapack/blas resources found的错误. ...

  7. Python连接MySQL乱码(中文变问号)

    #coding=utf-8 import MySQLdb db = MySQLdb.connect("IP","用户名","密码",&quo ...

  8. Java Web---登录验证和字符编码过滤器

    什么是过滤器? 在Java Web中,过滤器即Filter.Servlet API中提供了一个Filter接口(javax.servlet.Filter).开发web应用时,假设编写的Java类实现了 ...

  9. PuTTY连接Linuxserver常常断线解决方式

    PuTTY在远程连接server之后.常常会断线提示"Software caused connection abort",并且常常在非常短的时间内就失去连接. 解决方式例如以下: ...

  10. SSM&SSH项目中 springmvc 乱码问题解决

    需要在web.xml文件中配置过滤器: <!-- 过滤器 过滤乱码 --> <filter> <filter-name>characterEncodingFilte ...