Spin-PDR locks (preemption detection and recovery)
[akaros.git] / tests / test_mmap_ipc.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5
6 #include <sys/mman.h>
7 #include <fcntl.h>
8 #include <parlib.h>
9 #include <timing.h>
10         
11 int main(void)
12 {
13         int pFile, *first;
14         pid_t pid;
15         pFile = open ("hello.txt", O_RDWR | O_CREAT, (mode_t)0600);
16         /* this mmap will give you a Bus Error on linux if you try to map more
17          * pages than the file contains (i think)... */
18         first = (int*)mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, pFile, 0);
19         if (first == MAP_FAILED) {
20                 fprintf(stderr, "Unable to mmap the file (%d), aborting!\n", errno);
21                 return -1;
22         }
23         first[0] = 3;
24         printf("the first number after initialization is %d at %08p\n", first[0],
25                first);
26         if ((pid = fork()) < 0) {
27                 perror("fork error");
28                 exit(1);
29         }
30         if (pid == 0) {
31                 /* delay here, to avoid the race a bit */
32                 udelay(1000000);
33                 printf("After fork in the parent, the first number is %d\n", first[0]);
34                 first[0] = 99;
35                 printf("Pid 0 sees value %d at mmapped address %08p\n", first[0],
36                        first);
37         } else {
38                 printf("After fork in the child, the first number is %d\n", first[0]);
39                 first[0] = 11;
40                 printf("Child pid %d sees value %d at mmapped address %08p\n", pid,
41                        first[0], first);
42         }
43 }