据这里所述,POSIX系统上可以使用fileno()从FILE*获取文件描述符,然后使用fstat从文件描述符获取stat信息。 stat结构包含设备号和inode号。您可以检查与inode匹配的文件系统中的文件。对于一个充满各种东西的文件系统,这显然需要一些时间。这不太可能实现(如链接的文章所述)的原因是,如果流是stdin或stdout之类的内容,或者如果它是已删除的打开文件,则可能没有文件名。它也可能因为硬链接而有多个名称。链接的文章提到了这篇comp.lang.c FAQ,其中简要概述了这个问题的无解性。编辑:感谢更正。