Rune - Content-locking work 1/2
[rune.git] / tests / mmap.d
1 #!/usr/local/bin/rune -x
2 #
3
4 limport "sys";
5 import "stdio";
6
7 int
8 main(int ac, char **av)
9 {
10         FdMap map;
11         int *ptr;
12         int i;
13         volatile char c;
14
15         map.mmap(1024*1024, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE);
16         stdio.stdout->format("error %d\n", map.error);
17         ptr = map.base;
18         for (i = 0; i < 1024*1024/4; ++i) {
19                 ++ptr[i];
20         }
21         ptr = NULL;
22         map.madvise(MADV_NOSYNC);
23         map.msync();
24         map.munmap();
25
26         map.mmap(1024*1024, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE);
27         stdio.stdout->format("error %d\n", map.error);
28         ptr = map.base;
29         for (i = 0; i < 1024*1024/4; ++i) {
30                 ++ptr[i];
31         }
32         map.mprotect(PROT_READ, 512*1024, 512*1024);
33         for (i = 0; i < 1024*1024/4; ++i) {
34                 c = ptr[i];
35                 ++c;
36         }
37         stdio.stdout->format("should see a seg-fault at index 131072\n");
38         for (i = 0; i < 1024*1024/4; ++i) {
39                 if (((i + 1) & 32767) == 0)
40                         stdio.stdout->format("index %d\n", i + 1);
41                 ++ptr[i];
42         }
43         map.madvise(MADV_FREE, 512*1024, 512*1024);
44         map.munmap();
45 }