~zulcss/samba/server-dailies-3.4

« back to all changes in this revision

Viewing changes to tests/shared_mmap.c

  • Committer: Chuck Short
  • Date: 2010-09-28 20:38:39 UTC
  • Revision ID: zulcss@ubuntu.com-20100928203839-pgjulytsi9ue63x1
Initial version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
}