window linux IPC ftok BY_HANDLE_FILE_INFORMATION
看这题目就很乱,心情当然也是不怎么美好了。前一段时间做了一个项目,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的更多相关文章
- linux ipc/its
linux进程间双向消息队列 server.c #include <stdio.h> #include <stdlib.h> #include <string.h> ...
- Linux IPC实践(1) -- 概述
进程的同步与互斥 进程同步: 多个进程需要相互配合共同完成一项任务. 进程互斥: 由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥;系统中某些 ...
- Linux IPC之共享内存C 事例
Linux IPC之共享内存 标签: linuxrandomnull工作 2011-08-25 11:52 4123人阅读 评论(0) 收藏 举报 分类: Linux(3) 读书札记(3) 版权 ...
- Linux IPC System V 共享内存
模型 #include<sys/types.h> #include<sys/ipc.h> #include<sys/shm.h> ftok() //获取key值 s ...
- Linux IPC实践(11) --System V信号量(1)
信号量API #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget ...
- Linux IPC基础(System V)
简介 IPC 主要有消息队列.信号量和共享内存3种机制.和文件一样,IPC 在使用前必须先创建,使用 ipcs 命令可以查看当前系统正在使用的 IPC 工具: 由以上可以看出,一个 IPC 至少包含 ...
- linux IPC简单学习
Posix和system v区别 所谓的IPC(进程间通信)指的是消息队列,共享内存,信号量3种机制合并起来,当然,这是个狭义的概念,只包含这三种.IPC又可以分为system v进程间通信和posi ...
- linux IPC 消息队列
消息队列函数原型 在建立IPC通讯时(如消息队列,共享内存)必须建立一个ID值.通常情况下,这个ID值由ftok函数得到 #inlcude <sys/types.h> #include & ...
- Linux IPC System V 信号量
模型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> ftok() //获取key ...
随机推荐
- 爬虫扒下 bilibili 视频信息
B站算是对爬虫非常非常友好的网站啦! 修改转载已取得腾讯云授权 在以上两篇文章中我们已经在腾讯云服务器上搭建好了 Python 爬虫环境了,下一步就是在云服务器上爬上我们的爬虫,抓取我们想要的数据: ...
- C#文本之XML
格式化XML public static string FormatXML(string XMLstring) { //校验是否是XML报文 if (!XMLstring.Contains(" ...
- SVN回到历史版本--转载
svn回到历史的某个版本 在代码的编写过程中,难免有些错误需要修改,或者想从以前的文件进行代码修改,这样就涉及到版本的追踪,如果你以前提交时日志写的非常清楚,那版本追踪回滚起来就事半功倍.得心应手.下 ...
- 淘宝JAVA中间件Diamond
以下是转载自网上资料,但是根据步骤可以搭建出diamond配置中心服务器. 项目中需要用到diamond的理由是, 项目中使用了很多定时任务和异步任务.而且这些定时任务和异步任务都是分布式的安排在多个 ...
- Node.js 使用http客户端得到网站的图片下载到本地
以下代码有些冗余,大家捡核心看就好. // 内置http模块,提供了http服务器和客户端功能 var http=require("http"); // cheerio模块,提供了 ...
- rails delegate机制
Delegate是一种应用composite来代替extend的机制,可以有效地降低代码的耦合性. Rails 2.2增加了delegate方法,可以十分方便地实现delegate机制. 01.def ...
- IOS Appstore价格表
- Java 连接使用 Redis
1. 开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. 首先你需要下载驱动包,下载 jedis.j ...
- Android自定义Toast
1.http://www.cnblogs.com/salam/archive/2010/11/10/1873654.html 2.
- STL vector的构造函数和析构函数(2)
原文来自:点击打开链接 译文: public member function vector的构造器:这里我仅仅翻译C++11的,C++98的就不翻译了. 构造器原型: <vector> s ...