c++中共享内存操作函数解析(三)

原创 2012年03月21日 22:30:39

OpenFileMapping

       打开一个命名的文件映射对象。

HANDLE OpenFileMapping(

  DWORD dwDesiredAccess,   // access mode

  BOOL bInheritHandle,       // inherit flag

  LPCTSTR lpName          // objectname

);

dwDesiredAccess:

       指定文件对象的访问权限。

       这个参数可以是下表中的一个值。

描述

FILE_MAP_WRITE

读和写的访问权限。hFileMappingObject参数创建时,有PAGE_READWRITE保护属性。

FILE_MAP_READ

写的访问权限。hFileMappingObject参数创建时,有PAGE_READWRITE或者PAGE_READONLY保护属性。

FILE_MAP_ALL_ACCESS

和FILE_MAP_WRITE一样

FILE_MAP_COPY

写复制访问权限。如果创建映射文件对象时,有PAGE_WRITECOPY和此参数(FILE_MAP_COPY),会接收执行文件的视图。

bInheritHandle:

       指定返回的句柄是否在进程创建机器被新的进程继承。如果为TRUE,则说明新的进程可以继承这个句柄。

 

lpName:

        命名的文件映射对象的名称。如果有一个此名称的打开的文件映射对象并且映射对象的安全描述符和dwDesiredAcess参数冲突,这次打开操作是成功的。    

返回值

       如果函数返回成功,返回值是打开的指定的文件映射句柄。

       如果函数执行失败,函数返回NULL,可以通过调用GetLastError函数获得详细的信息。

说明

OpenFileMapping函数返回的句柄可以被用于任何需要文件映射对象句柄的函数。

UnmapViewOfFile

从调用线程地址空间释放文件数据映像。

BOOL UnmapViewOfFile(

  LPCVOID lpBaseAddress   // startingaddress

);

lpBaseAddress:

       文件映像的开始地址,这个值必须设定为MapViewOfFile函数的返回值。

返回值  

如果函数返回成功,返回值非空,所有在指定区域的被用的空间被释放。

如果返回失败,返回值为0.详细信息可以通过调用GetLastError函数获得。

说明

       虽然应用可以关闭创建文件映射对象的文件句柄,但是系统保持相应的文件为打开状态直到最后的文件映像被释放。

CloseHandle

       关闭一个打开的对象句柄。

BOOL CloseHandle(

  HANDLE hObject   // handle to object

);

hObject

       打开对象的句柄。

返回值

       如果函数执行成功,返回为非零。

       如果函数执行失败,返回值为0,可以通过GetLastError函数获得详细信息。

说明

       CloseHandle函数可以关闭下面的对象:

·      Access token –访问令牌

·      Communications device ---通信设备

·      Console input ---终端输入

·      Console screen buffer ---终端屏幕缓冲去

·      Event –事件

·      File –文件

·      File mapping—文件映射

·      Job ---作业

·      Mailslot –油槽

·      Mutex –互斥

·      Named pipe –命名管道

·      Process –进程

·      Semaphore –信号量

·      Socket ---套接字

·      Thread---线程

CloseHandle函数使指定的对象句柄无效,递减对象句柄计数,执行对象保留检查。在最后一个对象的句柄关闭后,这个句柄就会在系统中消失。

       关闭一个线程句柄不会终止相应的线程。为了移除一个线程对象,必须终止这个线程,然后关闭线程对象。

       用CloseHandle函数可以关闭由CreateFile函数返回的句柄。用FindClose函数关闭由FindFirstFile返回的句柄。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

c++共享内存操作实例

1、创建共享内存         HANDLE hMapping; LPTRANSDATA lpData;   //要发送的结构体 hMapping = CreateFileMapping(IN...

C++指针和C指针的区别:前者类型要求更严格

先看看在C语言中, test.c如下: int main() { int *p; char *q; void *v; v = p; q = v; return 0; }

Windows共享内存示例

Windows共享内存示例   共享内存主要是通过映射机制实现的。   Windows 下进程的地址空间在逻辑上是相互隔离的,但在物理上却是重叠的。所谓的重叠是指同一块内存区域可能被多个进程同...

再谈IPC之共享内存 (某公司实习生招聘笔试试题)

我们先来看看原题目:

进程间通信_共享内存类_C++实现

忘记是从哪里整理的一个类了,但非常好用,可以将其放在自己的项目中实现不同进程间数据的通信。 头文件:/*************************************************...
  • fengrx
  • fengrx
  • 2009-04-13 13:39
  • 9097

如何获取float变量在内存中的二进制数据?

#include void printBinaryDigit(float *pf) { int n = *(int *)pf; int sizeOfBits = sizeof(int) * 8;...

C/C++是否存在全局的或者静态的register变量?

看程序:

完全二叉树叶子节点数n0和总结点数N的关系 (某公司校园招聘笔试试题)

若完全二叉树的节点个数为2N-1,则叶节点个数为()     A)N-1 B)2×N C)2N-1 D)2N

C++中的try catch

先来看一个简单的程序:

Windows核心编程之共享内存

Windows共享数据和信息的机制:RPC、COM、OLE、DDE、窗口消息、剪贴板、邮箱、管道、套接字以及内存映射文件。 内存映射:通过让两个或多个进程映射同一个文件。(在进程空间中保留一个地址空间...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)