#include #include #include #include #include #include void do_work(char *p, size_t size) { printf("parsing %p + %zu\n", p, size); } int main(int argc, char *argv[]) { char *filename = argv[1]; struct stat sb; void *p; int fd; if (argc < 2) errx(1, "argument"); fd = open(filename, O_RDONLY); if (fd == -1) err(1, "open %s", filename); if (fstat(fd, &sb) == -1) err(1, "fstat %s", filename); p = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0); if (p == MAP_FAILED) err(1, "mmap %zu", sb.st_size); do_work(p, sb.st_size); munmap(p, sb.st_size); close(fd); return (0); }