之前访问磁盘文件的方法是open(),然后再read(),write()函数。。。。
另一种方法就是使用mmap()函数,将磁盘文件 映射到内存中,我们通过指针来读取即可。
1、创建映射区
#include <sys/mman.h>
void * mmap(void*addr, //建立映射区的首地址,由linux内核指定,使用时直接置NULL
size_t length,//映射区大小,由磁盘的原文件大小决定
int prot,//映射区内存的权限PROT_READ、PROT_WRITE、PROT_READ|PROT_WRITE
int flags,//标志位参数(常用于设定更新物理区域、设置共享、创建匿名映射区)
//MAP_SHARED:将映射区所做的操作反映到物理设备上(磁盘)
//MAP_PRIVATE:映射区所做的修改不会反应到物理设备上
//在共享内存上做的修改能否反映到物理磁盘上。
int fd, //用来建立映射区的文件描述符 //打开硬件磁盘open(),之后就会有文件描述符了
off_t offset;) //映射文件的偏移(4k的整数倍)
//可以将整个文件映射,也可以截取一部分映射到内存
返回值:成功返回void* 即addr的值,映射区首地址;
失败,返回MAP_FAILED 宏
2、释放映射区
#include <sys/mman.h>
int munmap(void *addr, //首地址
size_t length); //映射区大小
返回值:成功0,失败-1
例如:
fd = open("test.txt",O_CREAT|O_RDWR,0644);//当前路径下创建test.txt, 当有O_CREAT,需要有第3个参数,一般为0644
char *p = mmap();
strcpy(p,"hello"); //通过这句就可以直接将"hello"字符串拷贝到文件中。