Похоже (из здесь ), что в системах POSIX вы можете использовать fileno (), чтобы получить дескриптор файла из FILE *, а затем использовать fstat, чтобы получить информацию о статистике из дескриптора файла. Структура stat содержит номер устройства и номер inode. Вы можете проверить файловую систему на наличие файлов, которые соответствуют inode. Очевидно, это займет некоторое время для файловой системы, полной вещей.
Причина, по которой это на самом деле невозможно (как объяснено в связанной статье), заключается в том, что у потока не может быть имени файла, если это что-то вроде stdin или stdout, или если это открытый файл, который был удален. Он может иметь несколько имен из-за жестких ссылок.
В связанной статье упоминается этот comp.lang.c FAQ , в котором кратко описывается неразрешимость этой проблемы.
РЕДАКТИРОВАТЬ: Спасибо за исправление.