1/* this tests whether we can use a shared writeable mmap on a file - 2 as needed for the mmap varient 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 while (count-- && buf[9124] != 55732) sleep(1); 43 44 if (count <= 0) exit(1); 45 46 buf[1763] = 7268; 47 exit(0); 48 } 49 50 fd = open(DATA,O_RDWR); 51 if (fd == -1) exit(1); 52 53 buf = (int *)mmap(NULL, 10000*sizeof(int), 54 (PROT_READ | PROT_WRITE), 55 MAP_FILE | MAP_SHARED, 56 fd, 0); 57 58 if (buf == (int *)-1) exit(1); 59 60 buf[9124] = 55732; 61 62 while (count-- && buf[1763] != 7268) sleep(1); 63 64 unlink(DATA); 65 66 if (count > 0) exit(0); 67 exit(1); 68} 69