#include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; if ( argc != 2 ) { fprintf(stderr, "Usage: %s filename\n", argv[0]); return EXIT_FAILURE; } pid_t pid; if ((pid = fork()) == -1) { perror("fork"); return EXIT_FAILURE; } if (pid == 0) { close(0); // close existing stdin (ignore errors...) fd = open(argv[1], O_RDONLY); dup2(fd, 0); execl("/bin/cat", "/bin/cat"); perror("execl"); // shouldn't get here! return EXIT_FAILURE; } wait(NULL); printf("Parent done\n"); }