#include #include #include #include #include #include #include #include #include #include int main(int argc, char ** argv) { int fd = 0; int pagesize = 0; unsigned int delta = 0; int retval = 0; size_t count = 0; size_t size = 0; char* addr = 0; pagesize = getpagesize(); srand(time(0)); delta = rand() % pagesize; if (argc > 1) delta = 0xf96; fprintf (stderr, "pagesize %d\n", pagesize); fprintf (stderr, "using delta %06d, %06x\n", delta, delta); fd = open ("/tmp/MemMapTest1.data", O_RDWR|O_CREAT); if (fd == -1) { fprintf (stderr, "Unable to create file: %s\n", strerror (errno)); exit (1); } if (unlink ("/tmp/MemMapTest1.data") == -1) { fprintf (stderr, "Unable to unlink file: %s\n", strerror (errno)); exit (1); } retval = ftruncate (fd, delta); if (retval == -1) { fprintf (stderr, "Unable to resize file: %s\n", strerror (errno)); exit (1); } size = delta; addr = (char*) mmap (0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (addr == MAP_FAILED) { fprintf (stderr, "Unable to map file: %s\n", strerror (errno)); exit (1); } fprintf (stderr, "%03d address: %p, size: %06d, %06x, new size: %06d, %06x\n", count, addr, size, size, size + delta, size + delta); while (count < 500) { if (munmap(addr, size) == -1) { fprintf (stderr, "Unable to unmap file: %s\n", strerror (errno)); exit (1); } size += delta; retval = ftruncate (fd, size); if (retval == -1) { fprintf (stderr, "Unable to resize file: %s\n", strerror (errno)); exit (1); } addr = (char*) mmap (addr, size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FIXED, fd, 0); if (addr == MAP_FAILED) { fprintf (stderr, "Unable to map file: %s\n", strerror (errno)); exit (1); } ++count; fprintf (stderr, "%03d address: %p, size: %06d, %06x, new size: %06d, %06x\n", count, addr, size, size, size + delta, size + delta); } fprintf (stderr, "%03d exited loop\n", count); return 0; }