2009-05-06 47 views
3

给定一个stdio FILE *指针,有没有一种方法可以让我发现(打开的)文件的名称?确定文件中的(打开的)文件名*

+0

文件描述符是一个整数,它与FILE *不同。我假设你想要FILE *的答案,但你可能想编辑你的标题。 – mkb 2009-05-06 18:32:13

回答

8

它看起来(从here),在POSIX系统上,您可以使用fileno()从FILE *获取文件描述符,然后使用fstat从文件描述符获取stat信息。 stat结构包含设备编号和inode编号。您可以检查文件系统中与inode匹配的文件。这显然需要一段时间才能完成一个文件系统。

这是不可能的原因(正如链接文章中所解释的):如果流类似于stdin或stdout,或者它是一个已被删除的打开文件,则该流可以没有文件名。由于硬链接,它也可以有多个名称。

链接文章提到this comp.lang.c FAQ简要概述了这个问题的不可溶性。

编辑:感谢您的更正。

+0

感谢您的回答不仅仅是“不可以”。 – Jamie 2009-05-06 19:25:45

2

不,没有。除此之外,FILE *可能不会引用指定的文件。如果您的应用程序需要此功能,您需要将打开的FILE * s中的某种地图 保留为用于打开它们的文件名。

1

没有标准定义的便携式解决方案。但是,您可以查看您的操作系统提供的API集。 POSIX系统有一个fstat函数,它带有一个描述符(不是FILE *)并返回一些信息。