|
代码:
01 #include <unistd.h>
02 #include <stdio.h>
03 #include <sys/mman.h>
04 #include <fcntl.h>
05 #include <stdlib.h>
06
07 typedef struct {
08 int integer;
09 char string[24];
10 } RECORD;
11
12 #define NRECORDS (100)
13
14 int main()
15 {
16 RECORD record, *mapped;
17 int i, f;
18 FILE *fp;
19
20 fp = fopen("records.dat", "w+");
21
22 for(i=0; i<NRECORDS; i++) {
23 record.integer = i;
24
25 sprintf(record.string, "RECORD-%d", i);
26
27 fwrite(&record, sizeof(record), 1, fp);
28 }
29
30 fclose(fp);
31
32 fp = fopen("records.dat", "r+");
33 fseek(fp, 43*sizeof(record), SEEK_SET);
34 fread(&record, sizeof(record), 1, fp);
35
36 record.integer = 143;
37 sprintf(record.string, "RECORD-%d", record.integer);
38
39 fseek(fp, 43*sizeof(record), SEEK_SET);
40 fwrite(&record, sizeof(record), 1, fp);
41 fclose(fp);
42
43 f = open("records.dat", O_RDWR);
44 mapped = (RECORD *)mmap(0, NRECORDS*sizeof(record), PROT_READ|PROT_WRITE , MAP_SHARED, f, 0);
45
46 mapped[43].integer = 243;
47 sprintf(mapped[43].string, "RECORD-%d", mapped[43].integer);
48
49 msync((void *)mapped, NRECORDS*sizeof(record), MS_ASYNC);
50 munmap((void *)mapped, NRECORDS*sizeof(record));
51
52 close(f);
53
54 exit(0);
55
56 } |
|