一、文件映射
不得不说利用文件映射对文件进行读写操作是非常方便的,因为可以像操作内存一样使用指针读写任意内容,前提是要将安全属性置为可读可写。利用文件映射进行写操作时内存和文件时同步的,修改内存内容的同时也会修改文件内容。
使用内存映射文件读写文件的具体过程可以这样:
(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
- 函数使用:
上述几个函数搭配使用,很简单。但和文件映射相比,想要查看文件内容的话必须创建字符串来接受文件内容。