#include #include #include #include #include #include int main(int argc, char **argv){ int pid; if(!(argc >= 4 && (strcmp(argv[1], "stdout") == 0 || strcmp(argv[1], "stdin") == 0 || strcmp(argv[1], "stderr") == 0))) { printf("Usage:\n"); printf("\t redir {stdout | stdin | stderr} file program [args]\n"); return -1; } int i; char* forkArgs[100]; for(i = 3; i < argc; i++){ forkArgs[(i - 3)] = argv[i]; } pid = fork(); if(pid == 0){ if(strcmp(argv[1], "stdout") == 0){ freopen(argv[2], "w+", stdout); }else if(strcmp(argv[1], "stdin") == 0){ freopen(argv[2], "r", stdin); }else{ freopen(argv[2], "w+", stderr); } execvp(argv[3], forkArgs); _exit(0); }else if(pid > 0){ wait(0); }else{ printf("couldn't fork a child"); return 1; } return 0; }