open Unix;; let mon_exec cmd args = execvp cmd (Array.append [|cmd|] args); assert false;; let command_fg_redirect cmd args redirections = let make_redirect rd = match rd with In_to_file file -> let desc_file = openfile file [O_RDONLY] 0o666 in dup2 desc_file stdin; close desc_file | Out_to_file file -> let desc_file = openfile file [O_WRONLY;O_CREAT;O_TRUNC] 0o666 in dup2 desc_file stdout; close desc_file | Err_to_file file -> let desc_file = openfile file [O_WRONLY;O_CREAT;O_TRUNC] 0o666 in dup2 desc_file stderr; close desc_file | Out_append_file file -> let desc_file = openfile file [O_WRONLY;O_APPEND;O_CREAT] 0o666 in dup2 desc_file stdout; close desc_file | Err_to_out -> dup2 stdout stderr in match fork () with 0 -> List.iter make_redirect redirections; mon_exec cmd args | pid -> snd (waitpid [] pid);; |