0

如果给定一个 std::string 形式的目录路径,我怎样才能得到一个指向该目录的 dirent 结构?

我可以首先使用 opendir() 获取所需目录的 DIR*。然后我可以在我的 DIR* 上使用 readdir(),但这会尝试返回 DIR* 中的条目而不是 DIR* 本身。

那么实现这一目标的适当方法是什么?

4

2 回答 2

2

如果您希望目录本身的目录条目位于其parent中,请执行以下操作:

  1. stat(path). 记录st_devst_ino
  2. stat(path + "/.."). 如果这st_dev不等于st_dev你得到的path,path是一个挂载点,我接下来要说的其他内容将不起作用。
  3. opendir(path + "/..")为您提供DIR*父目录。
  4. readdir直到你找到一个dirent等于d_inost_ino在步骤 1 中保存的值。这就是你想要的。

但是,您从该算法中获得的唯一一条您不能仅通过执行步骤 1 获得的信息是其父目录中的目录名称。还有一种更简单的方法来获取该信息:调用realpath()规范化路径,然后提取结果的最后一个组件。挂载点或符号链接也没有问题。

于 2011-03-17T22:54:02.477 回答
1

重复readdir()直到到达direntnamed .,它就是目录本身。要从 shell 中查看此内容,请键入ls -al

于 2011-03-17T22:23:44.200 回答