К сожалению, смысл перенаправления ввода / вывода в том, что ваша программа не должна знать, что такое файлы ввода / вывода. В системах на основе Unix вы не можете смотреть на аргументы командной строки, поскольку < main.in > main.out
фактически обрабатывается оболочкой, которая использует эти файлы для настройки стандартного ввода и вывода перед вызовом вашей программы.
Вы должны помнить, что иногда стандартный ввод и вывод не будут даже файлами, поскольку они могут быть терминалом или каналом. например,
./generate_input | ./program.x | less
Таким образом, одно из решений состоит в том, чтобы перепроектировать вашу программу так, чтобы выходной файл был явным аргументом.
./program.x --out=main.out
Таким образом, ваша программа знает имя файла. Стоимость заключается в том, что ваша программа теперь отвечает за открытие (и, возможно, создание) файла.
Тем не менее, в системах Linux вы можете найти то, на что указывают ваши стандартные файловые дескрипторы из специальной файловой системы / proc. Для каждого дескриптора файла будут символические ссылки
/proc/<process_id>/fd/0 -> standard_input
/proc/<process_id>/fd/1 -> standard_output
/proc/<process_id>/fd/2 -> standard_error
Извините, я не знаю fortran, но psudeo-код может проверить выходной файл:
out_name = realLink( "/proc/"+getpid()+"/fd/1" )
if( isNormalFile( out_name ) )
...
Имейте в виду, что я сказал ранее, нет гарантии, это на самом деле будет нормальный файл. Это может быть терминальное устройство, канал, сетевой сокет, что угодно ... Кроме того, я не знаю, на каких других операционных системах это работает, кроме redhat / centos linux, поэтому он может быть не таким переносимым. Больше диагностического инструмента.