#include #include #include #include #include #include #include void reader(int fd, int size) { int i, off, x; char *addr; addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); for (i = 0; i < 100; i++) { for(off = 0; off < size; off += 4096) { x += *(addr + off); } madvise(addr, size, MADV_DONTNEED); } } int main(int argc, char *argv[]) { int fd; char *addr, *c; unsigned long size; struct stat statbuf; fd = open(argv[1], O_RDONLY); if (fd < 0) { perror("cannot open file"); return 1; } if (fstat(fd, &statbuf)) { perror("fstat failed"); return 1; } size = statbuf.st_size; /* mmap in 2 place. */ addr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); mlock(addr, size); reader(fd, size); }