给定stdio FILE *
指针,是否有方法可以发现(已打开)文件的名称?
答案 0 :(得分:8)
看起来(来自here)在POSIX系统上你可以使用fileno()从FILE *获取文件描述符,然后使用fstat从文件描述符中获取stat信息。 stat结构包含设备编号和inode编号。您可以在文件系统中检查与inode匹配的文件。对于一个充满东西的文件系统来说,这显然需要一些时间。
这实际上不可能的原因(如链接文章中所述)是如果某个流类似于stdin或stdout,或者它是一个已被删除的打开文件,则它可以没有文件名。由于硬链接,它可以有多个名称。
链接文章提及this comp.lang.c FAQ,简要概述了这个问题的不可解决性。
编辑:感谢您的纠正。
答案 1 :(得分:2)
不,没有。除了其他任何东西,FILE *可能不会引用命名文件。如果您的应用程序需要此工具,您将需要维护某种地图 从打开的FILE * s到用于打开它们的文件名。
答案 2 :(得分:1)
没有标准定义的便携式解决方案。但是,您可以查看操作系统提供的API集。 POSIX系统有一个fstat
函数,它接受一个描述符(不是FILE *
)并返回一些信息。