Advertisement
StarHonor

map.c

Mar 27th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.24 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/mman.h>
  5. #include <unistd.h>
  6. #include <sys/stat.h>
  7. #include <fcntl.h>
  8. #include <sys/times.h>
  9. #include <limits.h>
  10.  
  11. #define LOOP 10
  12.  
  13. int
  14. main (argc, argv)
  15.      int argc;
  16.      char *argv[];
  17. {
  18.   int fd, len, pg, i, j;
  19.   struct stat stat_buf;
  20.   char c, *paddr;
  21.  
  22.   if ((fd = open (argv[1], O_RDWR)) == -1)
  23.     perror ("open");
  24.  
  25.   if (fstat (fd, &stat_buf) == -1)
  26.     perror ("fstat");
  27.   len = stat_buf.st_size;
  28.  
  29.   pg = getpagesize ();
  30.   printf ("Page size %d\n", pg);
  31.   printf ("File size in byte %ld\n", len);
  32.   len = len + pg - (len % pg);
  33.   printf ("File size rounded to page size %ld\n", len);
  34.  
  35.   paddr = mmap ((caddr_t) 0, len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  36.   //paddr = mmap ((caddr_t) 0, len, PROT_READ | PROT_WRITE,  MAP_PRIVATE, fd, 0);
  37.   if (paddr == (caddr_t) - 1)
  38.     perror ("mmap");
  39.  
  40.   close (fd);
  41.  
  42.   for (j = 0; j < LOOP; j++) {
  43.     printf ("loop %d\n", j);
  44.     for (i = 0; i < len - pg; i += (2 * pg)) {
  45.       c = paddr[i];
  46.       paddr[i] = 'Y';
  47.       paddr[i + 1] = 'Y';
  48.     }
  49.  
  50.     for (i = pg; i < len - pg; i += (2 * pg)) {
  51.       c = paddr[i];
  52.       paddr[i] = 'N';
  53.       paddr[i + 1] = 'N';
  54.     }
  55.   }
  56.   return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement