Это потому, что файловые дескрипторы 0, 1 и 2 являются входными, выходными и ошибочными, соответственно, и open захватит первый доступный файловый дескриптор. Обратите внимание, что это будет работать только в том случае, если дескрипторы файлов 0, 1 и 2 еще не используются.
И вы должны быть осторожны с используемыми терминами, stdin
, stdout
и stderr
на самом деле являются дескрипторами файлов (FILE*
), а не дескрипторами файлов, хотя между ними и дескрипторами файлов существует корреляция.