一尘不染

从C中的文件描述符中检索文件名

linux

是否可以在C中获取文件描述符(Linux)的文件名?


阅读 269

收藏
2020-06-02

共1个答案

一尘不染

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

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

2020-06-02