一、文件映射
不得不說利用文件映射對文件進行讀寫操作是非常方便的,因爲可以像操作內存一樣使用指針讀寫任意內容,前提是要將安全屬性置爲可讀可寫。利用文件映射進行寫操作時內存和文件時同步的,修改內存內容的同時也會修改文件內容。
使用內存映射文件讀寫文件的具體過程可以這樣:
(1)調用CreateFile函數打開想要映射的文件,得到文件句柄hFile。該函數是沒有文件時創建問件,有文件時創建問件
(2)調用CreateFileMapping函數,並傳入文件句柄hFile,爲該文件創建一個內存映射內核對象,得到內存映射文件的句柄hMap。
(3)調用MapViewOfFile函數映射整個文件或一部分到進程的虛擬地址空間。該函數返回文件映射到內存後的起始地址。使用指向這個地址的指針就可以讀取文件的內容了。調試時可以在內存窗口看一下內容。
(4)調用UnmapViewOfFile函數來解除文件映射。
(5)調用CloseHandle函數關閉文件對象,必須傳入內存映射文件句柄hMap
(6)調用CloseHandle函數關閉文件對象,必須傳入文件句柄hFile。
二、文件指針
- 要用到的函數
_open、_lseek、_write,_read和_close - 函數的說明
- _open
根據文件名打開文件,返回int型的文件句柄,也就是文件描述符。文件描述符是系統內核中文件索引 - _lseek
傳入_open返回的int型文件描述符和文件偏移,將文件指針定位到偏移處 - _read
傳入文件描述符和字符串指針以及讀取內容大小,將讀取的內容寫進字符串指針指向的字符串中 - _write
傳入文件描述符以及源串指針和要寫入的長度,寫入位置爲經由_lseek設置的文件指針定位的地方 - _close
傳入文件描述符,關閉文件句柄
- _open
- 函數使用:
上述幾個函數搭配使用,很簡單。但和文件映射相比,想要查看文件內容的話必須創建字符串來接受文件內容。