是否可以在C中获取文件描述符(Linux)的文件名?
您可以使用readlink在/proc/self/fd/NNN其中NNN是文件描述符。这将为您提供文件打开时的名称- 但是,如果此后文件被移动或删除,它可能不再准确(尽管Linux在某些情况下可以跟踪重命名)。要进行验证,stat请提供给定的文件名和fstatfd,并确保st_dev和st_ino相同。
readlink
/proc/self/fd/NNN
stat
fstat
st_dev
st_ino
当然,并非所有文件描述符都引用文件,对于那些文件描述符,您会看到一些奇怪的文本字符串,例如pipe:[1538488]。由于所有真实文件名都是绝对路径,因此您可以轻松确定其中的哪个。此外,正如其他人指出的那样,文件可以具有指向它们的多个硬链接- 这只会报告打开文件的那个。如果要查找给定文件的所有名称,则只需遍历整个文件系统。
pipe:[1538488]