Я чувствую, что это тема, которую я принял как должное.В прошлом я буквально закрывал столько файловых дескрипторов «потому что мне сказали».Большую часть времени это работало, но иногда я сталкивался с непредсказуемым поведением.
Итак, я хотел бы спросить - какое правило для закрытия файловых дескрипторов после вызова dup / dup2?
Допустим, я хочу выполнить cat < in > out
.
fd[IN] = open("in", O_RDONLY);
saved_stdin = dup(STDIN_FILENO);
dup2(fd[IN], STDIN_FILENO);
close(fd[IN])
fd[OUT] = open("out", O_WRONLY | O_CREAT | O_TRUNC, 0644);
saved_stdout = dup(STDOUT_FILENO);
dup2(fd[OUT], STDOUT_FILENO);
close(fd[OUT])
// Later on when I want to restore stdin and stdout
dup2(saved_stdin, STDIN_FILENO);
close(saved_stdin);
dup2(saved_stdout, STDINOUT_FILENO);
close(saved_stdout);
Это правильно, или я должен закрыть больше файловых дескрипторов?