从文件中确定(打开的)文件名*

时间:2009-05-06 18:28:09

标签: c stdio

给定stdio FILE *指针,是否有方法可以发现(已打开)文件的名称?

3 个答案:

答案 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 *)并返回一些信息。