previous | start

Example (mmap)

(source)

    1   
    2   #include <stdio.h>
    3   #include <stdlib.h>
    4   #include <unistd.h>
    5   #include <fcntl.h>     // open and O_RDWR
    6   #include <sys/stat.h>  // struct stat
    7   #include <sys/mman.h>  // mmap, munmap, ...
    8   
    9   
   10   
   11   
   12   int main(int argc, char* argv[])
   13   {
   14     int fd = open("test.bak", O_RDWR);
   15   
   16     if ( fd < 0 ) {
   17       fprintf(stderr, "Cannot open input file test.bak for update\n");
   18       exit(1);
   19     }
   20     struct stat s;
   21   
   22     fstat(fd, &s);
   23   
   24     char *buf;
   25   
   26     buf = mmap(0, s.st_size, PROT_WRITE, MAP_SHARED, fd, 0);
   27   
   28     if ( buf == (void *) -1 ) {
   29       fprintf(stderr, "mmap failed size = %lu\n", s.st_size);
   30       exit(2);
   31     }
   32     int i;
   33     printf("\nInitial test.bak contents:\n\n");
   34     for(i = 0; i < s.st_size; i++) {
   35       printf("%c", buf[i]);
   36     }
   37   
   38     // Reverse the characters in the file
   39     char ch;
   40     int j = s.st_size - 1;
   41     for(i = 0; i < s.st_size / 2; i++, j--) {
   42       // swap buf[i] and buf[j]
   43       ch = buf[j];
   44       buf[j] = buf[i];
   45       buf[i] = ch;
   46     }
   47   
   48     printf("\n\nModified test.bak contents:\n\n");
   49     for(i = 0; i < s.st_size; i++) {
   50       printf("%c", buf[i]);
   51     }
   52     
   53   
   54     munmap(buf, s.st_size);
   55     close(fd);
   56   
   57   
   58   
   59     return 0;
   60   }


previous | start