Допустим, вы пишете программу оболочки и хотите перенаправить stdin и stdout в программу, которую хотите запустить.Это может выглядеть примерно так:
fdin = open(infile, O_RDONLY);
fdout = open(outfile, O_WRONLY);
// Check for errors, send messages to stdout.
...
int pid = fork(0);
if(pid == 0) {
close(0);
dup(fdin);
close(fdin);
close(1);
dup(fdout);
close(fdout);
execvp(program, argv);
}
// Parent process cleans up, maybe waits for child.
...
dup2 () - немного более удобный способ сделать это close () dup () можно заменить на:
dup2(fdin, 0);
dup2(fdout, 1);
причина, по которой вы хотите это сделать, заключается в том, что вы хотите сообщать об ошибках в stdout (или stderr), поэтому вы не можете просто закрыть их и открыть новый файл в дочернем процессе.Во-вторых, было бы напрасно тратить вилку, если любой вызов open () вернул ошибку.