首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C中从文件描述符中检索文件名

在C中从文件描述符中检索文件名
EN

Stack Overflow用户
提问于 2009-07-27 23:14:08
回答 8查看 120.3K关注 0票数 121

是否有可能在C中获得文件描述符(Linux)的文件名?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-27 17:38:32

您可以在/proc/self/fd/NNN上使用readlink,其中NNN是文件描述符。这将为您提供打开文件时的文件名-但是,如果文件在那之后被移动或删除,它可能不再准确(尽管Linux在某些情况下可以跟踪重命名)。要进行验证,请对给定的文件名执行stat操作,并对您拥有的fd执行fstat操作,并确保st_devst_ino相同。

当然,并不是所有的文件描述符都引用文件,对于这些文件,您会看到一些奇怪的文本字符串,比如pipe:[1538488]。因为所有的真实文件名都是绝对路径,所以您可以轻松地确定哪些是绝对路径。此外,正如其他人所指出的,文件可以有多个指向它们的硬链接-这将只报告它打开时使用的硬链接。如果要查找给定文件的所有名称,只需遍历整个文件系统。

票数 141
EN

Stack Overflow用户

发布于 2012-11-25 02:52:58

我在Mac上遇到了这个问题,我们没有/proc虚拟文件系统,所以被接受的解决方案不能工作。

相反,我们有一个用于fcntlF_GETPATH命令

代码语言:javascript
复制
 F_GETPATH          Get the path of the file descriptor Fildes.  The argu-
                    ment must be a buffer of size MAXPATHLEN or greater.

因此,要获得与文件描述符相关联的文件,可以使用以下代码片段:

代码语言:javascript
复制
#include <sys/syslimits.h>
#include <fcntl.h>

char filePath[PATH_MAX];
if (fcntl(fd, F_GETPATH, filePath) != -1)
{
    // do something with the file path
}

因为我从来不记得MAXPATHLEN是在什么地方定义的,所以我认为来自系统限制的PATH_MAX就可以了。

票数 104
EN

Stack Overflow用户

发布于 2009-07-27 15:20:19

在Windows中,使用GetFileInformationByHandleEx,传递FileNameInfo,您可以检索文件名。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1188757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档