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