#include #include #include #include #include int main(int argc, char *argv[]) { if (argc < 3) { fprintf(stderr, "Missing argument\n"); return 2; } // Save stdout int stdout_dup = dup(STDOUT_FILENO); int file_fd = open(argv[1], O_CREAT | O_WRONLY, 0644); // Redirect stdout to the file dup2(file_fd, STDOUT_FILENO); int status; pid_t pid = fork(); if (pid == 0) { execvp(argv[2], argv + 2); return 127; } else { waitpid(pid, &status, 0); if (WIFEXITED(status)) { status = WEXITSTATUS(status); fflush(stdout); dup2(stdout_dup, STDOUT_FILENO); close(stdout_dup); } if (status != 127) printf("%s exited with %d!\n", argv[2], status); else fprintf(stderr, "Missing command\n"); return status == 127; } }