日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

内存映射文件三

發(fā)布時(shí)間:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存映射文件三 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

步驟4從進(jìn)程的地址空間中撤消文件數(shù)據(jù)的映像

當(dāng)不再需要保留映射到進(jìn)程地址空間區(qū)域中的文件數(shù)據(jù)時(shí),可以通過(guò)調(diào)用下面的函數(shù)將它釋放:

BOOL UnmapViewOfFile(PVOID pvBaseAddress);

參數(shù):pvBaseAddressMapViewOfFile函數(shù)返回。

注意:如果沒(méi)有調(diào)用這個(gè)函數(shù),那么在進(jìn)程終止運(yùn)行前,保留的區(qū)域就不會(huì)被釋放。每當(dāng)調(diào)用MapViewOfFile時(shí),系統(tǒng)總是在你的進(jìn)程地址空間中保留一個(gè)新區(qū)域,而以前保留的所有區(qū)域?qū)⒉槐会尫拧?/span>

為了提高速度,系統(tǒng)將文件的數(shù)據(jù)頁(yè)面進(jìn)行高速緩存,并且在對(duì)文件的映射視圖進(jìn)行操作時(shí)立即更新文件的磁盤(pán)映像。如果需要確保你的更新被寫(xiě)入磁盤(pán),可以強(qiáng)制系統(tǒng)將修改過(guò)的數(shù)據(jù)的一部分或全部重新寫(xiě)入磁盤(pán)映像中,方法是調(diào)用FlushViewOfFile函數(shù):

BOOL FlushViewOfFile(

?? PVOID pvAddress,

?? SIZE_T dwNumberOfBytesToFlush);

第一個(gè)參數(shù)是包含在內(nèi)存映射文件中的視圖的一個(gè)字節(jié)的地址。該函數(shù)將你在這里傳遞的地址圓整為一個(gè)頁(yè)面邊界值。

第二個(gè)參數(shù)用于指明你想要刷新的字節(jié)數(shù)。系統(tǒng)將把這個(gè)數(shù)字向上圓整,使得字節(jié)總數(shù)是頁(yè)面的整數(shù)。如果你調(diào)用FlushViewOfFile函數(shù)并且不修改任何數(shù)據(jù),那么該函數(shù)只是返回,而不將任何信息寫(xiě)入磁盤(pán)。

?

步驟5和步驟6:關(guān)閉文件映射對(duì)象和文件對(duì)象

CloseHandle函數(shù)關(guān)閉相應(yīng)的對(duì)象。

在代碼開(kāi)始運(yùn)行時(shí)關(guān)閉這些對(duì)象:

HANDLE hFile = CreateFile(...);

HANDLE hFileMapping = CreateFileMapping(hFile, ...);

CloseHandle(hFile);

PVOID pvFile = MapViewOfFile(hFileMapping, ...);

CloseHandle(hFileMapping);

?

// Use the memory-mapped file.

?

UnmapViewOfFile(pvFile);

?

例子:(vs2008代碼下載

// ------------------------------------------------------------

// 文件名??? : 17_FileMapping2.cpp

// 創(chuàng)建者?? ?:? 方煜寬

//?郵箱????? fangyukuan@gmail.com

// 創(chuàng)建時(shí)間?? :? 2010-7-12 23:50

// 功能描述?? :? 內(nèi)存映射數(shù)據(jù)文件

//

// ------------------------------------------------------------

#include "stdafx.h"

#include "windows.h"

#include <iostream>

using namespace std;

?

int _tmain(int argc, _TCHAR* argv[])

{

?? // Open the file that we want to map.

?? // 注意請(qǐng)?jiān)?/span>c盤(pán),自己創(chuàng)建一個(gè)kuan.txt文件,并寫(xiě)入內(nèi)容

?? HANDLE hFile = ::CreateFile(L"C:\\kuan.txt",

????? GENERIC_READ | GENERIC_WRITE,

????? 0,

????? NULL,

????? OPEN_ALWAYS,

????? FILE_ATTRIBUTE_NORMAL,

????? NULL);

?

?? // Create a file-mapping object for the file.

?? HANDLE hFileMapping = ::CreateFileMapping(hFile,

????? NULL,

????? PAGE_WRITECOPY,

????? 0, 0,

????? NULL);


?? PBYTE pbFile = (PBYTE)::MapViewOfFile(hFileMapping, FILE_MAP_COPY, 0, 0, 0);

?? cout << pbFile << endl;

??

?? ::UnmapViewOfFile(pbFile);

?

?? ::CloseHandle(hFileMapping);

?? ::CloseHandle(hFile);

?

?? return 0;

}

?

轉(zhuǎn)載于:https://blog.51cto.com/rosehacker/449626

總結(jié)

以上是生活随笔為你收集整理的内存映射文件三的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。