#include // execvp, fork #include // printf #include // wait #include // open, O_WRONLY int main(int argc, char* argv[]) { if (argc < 2) return 1; pid_t fpid = fork(); if (fpid == 0) { int f = open(argv[argc-1], O_WRONLY | O_TRUNC | O_CREAT, 0755); if (f < 0) { perror("open"); return 2; } dup2(f, 1); close(f); char* args[argc-1]; for (int i = 1; i < argc - 1; i++) args[i-1] = argv[i]; args[argc-2] = NULL; execvp(argv[1], args); } else { int status; wait(&status); printf("%d %d\n", fpid, status); } }