И из-за этого можно поймать очень неприятный эффект: если закрыть stdout, следующий открытый файл может получить тот же дескриптор 1. То есть код вроде этого: close(1); FILE *f = fopen("output.txt", "w"); printf("hello\n"); Может записать printf не в терминал, а прямо в output.txt. Потому что система обычно выдаёт минимальный свободный файловый дескриптор. Закрыл 1 - значит он снова свободен. Открыл файл - он может стать новым stdout. Мелочь, но именно из таких мелочей и состоит настоящее понимание UNIX.