/* * Compile: cc -ansi -pedantic -o mcp mcp.c * Run: mcp /path/to/filename > filename.copy */ #include #include #include #include int main(int argc, char* argv[]) { struct stat st; int fd; int flags = MAP_PRIVATE | MAP_NOCORE | MAP_NOSYNC | MAP_PREFAULT_READ; char *buffer, *fname; if (argc < 1) errx(1, "Usage: %s filename", argv[0]); fname = argv[1]; fd = open(fname, O_RDONLY); if (fd == -1) err("open %s", fname); if (fstat(fd, &st) == -1 || !S_ISREG(st.st_mode)) err("stat %s", fname); buffer = mmap(NULL, st.st_size, PROT_READ, flags, fd, (off_t)0); if (buffer == MAP_FAILED) err("mmap %s", fname); madvise(buffer, st.st_size, MADV_SEQUENTIAL); if (write(1, buffer, st.st_size) == -1) err("write"); return (0); }