#include #include #include #include #include #include #include #define handle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) int main(int argc, char *argv[argc+1]) { int fd = open(argv[1], O_RDONLY); struct stat sb; if (fd == -1) handle_error("open"); if (fstat(fd, &sb) == -1) /* To obtain file size */ handle_error("fstat"); char *addr = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (addr == MAP_FAILED) handle_error("mmap"); printf("addr: %p\n", (void*)addr); printf("mmap addr: %p\n", (void*)mmap); for (int i = 0; i < sb.st_size; i++) { printf("%c", addr[i]); } printf("\n--------------------------------------------------------------------------------\n"); for (int i = sb.st_size - 1; i >= 0; i--) { printf("%c", addr[i]); } sleep(1000); munmap(addr, sb.st_size); return EXIT_SUCCESS; }