mmap函数的用法 |
|
[plain] 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; }
|
|
|
 |
 |
 |
|
 |
 |
 |
|
|
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn
|
|
|
 |
|
|