内存映射函数
#include <sys/mman.h>
//把文件内容和一块同样大小的内存空间关联起来
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
addr:NULL 系统自动分配内存空间
length:文件中内容的大小
prot:PROT_READ PROT_WRITE PROT_EXEC PROT_NONE
flags:MAP_SHARED MAP_PRIVATE
fd:内存关联的文件描述符
offset:文件内容相对于文件开始的偏移量
//撤销文件内容和内存的关联
int munmap(void *addr, size_t length);
addr:mmap函数的返回值
length:文件内容的大小
#include <sys/mman.h>
int msync(void *addr, size_t length, int flags);
addr:mmap函数的返回值
length:文件内容的大小
flags:MS_SYNC(同步) MS_ASYNC(非同步) MS_INVALIDATE
例子:
typedef struct record
{
int integer;
char name[32];
}RECORD;
int main()
{
//标准文件读写
FILE *fp=NULL;
int i=0;
fp=fopen("record.dat","w");
RECORD tmp;
for(i=0;i<100;i++)
{
tmp.integer=i;
sprintf(tmp.name,"RECORD-%d",i);
fwrite(&tmp,sizeof(tmp),1,fp);
}
fclose(fp);
//使用标准文件IO读写
fp=fopen("record.dat","r+");
fseek(fp,43*sizeof(RECORD),SEEK_SET);
fread(&tmp,sizeof(tmp),1,fp);
tmp.integer=143;
sprintf(tmp.name,"RECORD-%d",tmp.integer);
fseek(fp,43*sizeof(RECORD),SEEK_SET);
fwrite(&tmp,sizeof(tmp),1,fp);
fclose(fp);
return 0;
}