Ваш процесс никогда не видит ни одного из этих перенаправлений. В результате оболочка соединит все файлы с эквивалентными файловыми дескрипторами (открывая их по мере необходимости), а затем запустит ваш код.
Все, что может сделать ваш код, - это использовать файл ручки, которые были открыты для вас. Любые трюки, которые вы используете, чтобы найти максимально открытый дескриптор в вашем коде, не будут работать, если у вас есть пробелы, такие как:
command >f1 5>f5
Я подозреваю, что вам было бы лучше просто использовать параметры командной строки, чтобы сделать это, что-то например:
command --output=file1 --output=file2 --output==file3
Тогда у вас есть полный контроль над тем, как вы обрабатываете эти аргументы в своем коде. Например, вы можете создавать карту файлов при открытии каждого из них.
Это также позволит вам использовать различные дескрипторы для других целей, например, для файлов данных, к которым вам нужен доступ (я думаю, вы будьте недовольны, если вы перезаписали их выходными данными, не связанными с ожидаемым содержимым, просто потому, что они были открыты как дескриптор файла).