#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) { printf("child running\n"); fd = open(argv[1], O_RDONLY); // should check for errors here! printf("Opened %s as fd %d\n", argv[1], fd); dup2(fd, 0); close(fd); execl("/bin/cat", "/bin/cat", NULL); perror("execl"); // shouldn't get here! return EXIT_FAILURE; } printf("parent waiting\n"); wait(NULL); printf("Parent done\n"); }