它看起来(从这里)在POSIX系统上你可以使用fileno()从FILE*获取文件描述符,然后使用fstat从文件描述符中获取stat信息.stat结构包含设备编号和inode编号.您可以在文件系统中检查与inode匹配的文件.对于一个充满东西的文件系统来说,这显然需要一些时间.
这不可能的原因(如链接文章中所述)是如果某个流类似于stdin或stdout,或者它是一个已被删除的打开文件,则它可以没有文件名.由于硬链接,它可以有多个名称.
链接的文章提到了这个comp.lang.c常见问题解答,简要概述了这个问题的不可解决性.
编辑:谢谢你的纠正.