你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Web开发
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; 
}
  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089