⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmap.c

📁 《Beginning Linux Programming》书的配置实例源代码。
💻 C
字号:
/*  We start by defining a RECORD structure    and then create NRECORDS versions each recording their number.    These are appended to the file records.dat.  */#include <unistd.h>#include <stdio.h>#include <sys/mman.h>#include <fcntl.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++) {        record.integer = i;        sprintf(record.string,"RECORD-%d",i);        fwrite(&record,sizeof(record),1,fp);    }    fclose(fp);/*  We now change the integer value of record 43 to 143    and write this to the 43rd record's string.  */    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);/*  We now map the records into memory    and access the 43rd record in order to change the integer to 243    (and update the record string), again using memory mapping.  */    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);    exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -