3

给定一个 stdioFILE *指针,是否有一种方法可以让我发现(打开的)文件的名称?

4

3 回答 3

8

它看起来(从这里)在 POSIX 系统上,您可以使用 fileno() 从 FILE* 获取文件描述符,然后使用 fstat 从文件描述符获取统计信息。stat结构包含设备号和inode号。您可以检查文件系统中与 inode 匹配的文件。对于一个充满东西的文件系统,这显然需要一些时间。

这实际上不可能的原因(如链接文章中所解释的)是,如果流是标准输入或标准输出之类的东西,或者它是已被删除的打开文件,则流可以没有文件名。由于硬链接,它也可以有多个名称。

链接的文章提到了这个 comp.lang.c 常见问题解答,它简要概述了这个问题的不可解决性。

编辑:感谢您的更正。

于 2009-05-06T18:42:04.850 回答
2

不,没有。除此之外,FILE * 可能不引用命名文件。如果您的应用程序需要此功能,您将需要维护某种从打开的 FILE *s 到您用来打开它们的文件名的映射。

于 2009-05-06T18:31:30.803 回答
1

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

于 2009-05-06T18:38:45.077 回答