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 18main() 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} 71