large-mmap.c 935 B

1234567891011121314151617181920212223242526272829303132
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/mman.h>
  4. #include <sys/types.h>
  5. #define TEST_LENGTH 0x10000f000
  6. #define TEST_LENGTH2 0x8000f000
  7. int main() {
  8. FILE*fp=fopen("testfile","a+");
  9. if (!fp) { perror("fopen"); return 1; }
  10. int rv = ftruncate(fileno(fp), TEST_LENGTH);
  11. if (rv) {perror ("ftruncate"); return 1;}
  12. else
  13. printf("large-mmap: ftruncate OK\n");
  14. void* a=mmap(NULL, TEST_LENGTH2, PROT_READ|PROT_WRITE, MAP_PRIVATE, fileno(fp), 0);
  15. if (a==MAP_FAILED) { perror("mmap 1"); return 1; }
  16. ((char*)a)[0x80000000]=0xff;
  17. printf("large-mmap: mmap 1 completed OK\n");
  18. rv = munmap(a, TEST_LENGTH2);
  19. if (rv) { perror("mumap"); return 1; }
  20. a=mmap(NULL, TEST_LENGTH, PROT_READ|PROT_WRITE, MAP_PRIVATE, fileno(fp), 0);
  21. if (a==MAP_FAILED) { perror("mmap 2"); return 1; }
  22. ((char*)a)[0x100000000]=0xff;
  23. printf("large-mmap: mmap 2 completed OK\n");
  24. return 0;
  25. }