open
создает описание файла в ядре, а возвращаемый дескриптор файла является своего рода указателем на него из пользовательского пространства, если только это не отрицательное значение, в этом случае open
не удалось. dup2
заставляет 0
также указывать на то же самое описание файла (если вы не передали отрицательное значение или если у вас нет файловых дескрипторов). Если ваша цель состояла в том, чтобы 0
указывал на описание файла, теперь вы можете избавиться от старого «указателя», чтобы не тратить файловые дескрипторы (процесс может выделить только ограниченное число).
(Кроме того, закрытие последней ссылки на описание файла может привести к определенным желательным действиям, таким как удаление файла, если он не понравился, или конец чтения канала, получающего EOF, если вы только что закрыли последнюю ссылку на соответствующий конец записи . Этого не произойдет, если вы «утекли» ссылку (= забыли, что такое fd, не закрывая ее)).