40d462302ef3d055ec82251bd36c1227e9bd795e
[gd/samba-autobuild/.git] / tests / shared_mmap.c
1 /* this tests whether we can use a shared writeable mmap on a file -
2    as needed for the mmap variant of FAST_SHARE_MODES */
3
4 #if defined(HAVE_UNISTD_H)
5 #include <unistd.h>
6 #endif
7 #include <sys/mman.h>
8 #include <sys/types.h>
9 #include <sys/stat.h>
10 #include <fcntl.h>
11
12 #define DATA "conftest.mmap"
13
14 #ifndef MAP_FILE
15 #define MAP_FILE 0
16 #endif
17
18 main()
19 {
20         int *buf;
21         int i; 
22         int fd = open(DATA,O_RDWR|O_CREAT|O_TRUNC,0666);
23         int count=7;
24
25         if (fd == -1) exit(1);
26
27         for (i=0;i<10000;i++) {
28                 write(fd,&i,sizeof(i));
29         }
30
31         close(fd);
32
33         if (fork() == 0) {
34                 fd = open(DATA,O_RDWR);
35                 if (fd == -1) exit(1);
36
37                 buf = (int *)mmap(NULL, 10000*sizeof(int), 
38                                    (PROT_READ | PROT_WRITE), 
39                                    MAP_FILE | MAP_SHARED, 
40                                    fd, 0);
41
42                 if (buf == (int *)-1) exit(1);
43
44                 while (count-- && buf[9124] != 55732) sleep(1);
45
46                 if (count <= 0) exit(1);
47
48                 buf[1763] = 7268;
49                 exit(0);
50         }
51
52         fd = open(DATA,O_RDWR);
53         if (fd == -1) exit(1);
54
55         buf = (int *)mmap(NULL, 10000*sizeof(int), 
56                            (PROT_READ | PROT_WRITE), 
57                            MAP_FILE | MAP_SHARED, 
58                            fd, 0);
59
60         if (buf == (int *)-1) exit(1);
61
62         buf[9124] = 55732;
63
64         while (count-- && buf[1763] != 7268) sleep(1);
65
66         unlink(DATA);
67                 
68         if (count > 0) exit(0);
69         exit(1);
70 }