给定一个 stdioFILE *
指针,是否有一种方法可以让我发现(打开的)文件的名称?
问问题
751 次
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 回答