如果给定一个 std::string 形式的目录路径,我怎样才能得到一个指向该目录的 dirent 结构?
我可以首先使用 opendir() 获取所需目录的 DIR*。然后我可以在我的 DIR* 上使用 readdir(),但这会尝试返回 DIR* 中的条目,而不是 DIR* 本身。
那么实现这一目标的适当方法是什么?
如果您希望目录本身的目录条目位于其parent中,请执行以下操作:
stat(path)
. 记录st_dev
和st_ino
。stat(path + "/..")
. 如果这st_dev
不等于st_dev
你得到的path
,path
是一个挂载点,我接下来要说的其他内容将不起作用。opendir(path + "/..")
为您提供DIR*
父目录。readdir
直到你找到一个dirent
等于d_ino
你st_ino
在步骤 1 中保存的值。这就是你想要的。但是,您从该算法中获得的唯一一条您不能仅通过执行步骤 1 获得的信息是其父目录中的目录名称。还有一种更简单的方法来获取该信息:调用realpath()
规范化路径,然后提取结果的最后一个组件。挂载点或符号链接也没有问题。
重复readdir()
直到到达dirent
named .
,它就是目录本身。要从 shell 中查看此内容,请键入ls -al
。