首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

m地图函数的用法

2012-09-21 
mmap函数的用法mmap函数的用法 (2005-11-06 09:14) 分类: C/C++ 改自Wrox《Linux程序设计》#includeunistd.

mmap函数的用法

mmap函数的用法 (2005-11-06 09:14) 分类: C/C++ 改自Wrox《Linux程序设计》  #include<unistd.h>#include<stdio.h>#include<sys/mman.h>#include<fcntl.h>#include<stdlib.h>typedef struct {int integer;char string[24];}RECORD;#define NRECORDS (100)int main(){RECORD record, *mapped;int i, f;FILE *fp;fp = fopen("records.dat", "w+");for (i = 0; i < NRECORDS; i++){memset(&record, 0, sizeof(record));/* 若不清空,内容未知 */record.integer = i;sprintf(record.string, "RECORD-%d", i);fwrite(&record,sizeof(record), 1, fp);}fclose(fp);/* 修改43条记录 */fp = fopen("records.dat", "r+");fseek(fp, 43*sizeof(record), SEEK_SET);fread(&record, sizeof(record), 1, fp);record.integer = 143;sprintf(record.string, "RECORD-%d", record.integer);fseek(fp, 43*sizeof(record), SEEK_SET);fwrite(&record, sizeof(record), 1, fp);fclose(fp);/* 修改43条记录 */f = open("records.dat", O_RDWR);mapped = (RECORD *)mmap(0, NRECORDS*sizeof(record), PROT_READ|PROT_WRITE, MAP_SHARED, f, 0);mapped[43].integer = 243;sprintf(mapped[43].string, "RECORD-%d", mapped[43].integer);msync((void *)mapped,NRECORDS*sizeof(record), MS_ASYNC);munmap((void *)mapped,NRECORDS*sizeof(record));close(f);return 0;} 

热点排行