C 修改目标文件夹后POSIX seekdir()和telldir()的行为

C 修改目标文件夹后POSIX seekdir()和telldir()的行为,c,posix,unix,posix-api,C,Posix,Unix,Posix Api,考虑以下任务: 1) 读取目标目录内容,将找到的每个目录结构传递给某个筛选函数,并以某种方式记住筛选后的元素,以便以后处理 2) 一段时间后,遍历过滤后的元素并对其进行处理(执行一些I/O) 最明显的方法是保存子目录的名称 但是,我希望将内存使用保持在最低限度,并避免额外的I/O。 根据POSIX手册,我可以使用telldir()保存每个目录项的位置,然后使用seekdir()恢复它们。为了保持这些位置的有效性,我必须保持目标目录处于打开状态,并且不使用rewinddir()调用 保持目录流打开

考虑以下任务:

1) 读取目标目录内容,将找到的每个目录结构传递给某个筛选函数,并以某种方式记住筛选后的元素,以便以后处理

2) 一段时间后,遍历过滤后的元素并对其进行处理(执行一些I/O)

最明显的方法是保存子目录的名称
但是,我希望将内存使用保持在最低限度,并避免额外的I/O。

根据POSIX手册,我可以使用telldir()保存每个目录项的位置,然后使用seekdir()恢复它们。为了保持这些位置的有效性,我必须保持目标目录处于打开状态,并且不使用rewinddir()调用
保持目录流打开并存储目录位置列表(long int`s)似乎是一个合适的解决方案
但是,不清楚文件夹修改后存储的位置是否仍然有效。我在POSIX标准中没有发现任何关于这些条件的评论。

  • 1) 仅添加/删除新目录条目时,存储的位置是否保持有效?
  • 2) 在某些已过滤的目录项被删除的情况下,未修改目录项的存储位置是否仍然有效
  • 3) 文件夹修改后,存储位置是否可能指向另一个目录条目
对于特定的系统,测试和找出这些问题的答案很容易,但我想知道关于这个主题的标准是什么


谢谢

在您调用
倒带目录
或关闭并重新打开目录之前,您对目录内容的视图不应更改。对不起,我手边没有参考资料。如果您需要,我会在以后找到它。

-如果在最近一次调用opendir()或rewinddir()之后从目录中删除或添加了文件,则后续调用readdir()是否会返回该文件的条目是未指定的。“+1无论如何。即使可以检索新条目,旧条目也应该保持不变,除非调用
revinddir
。我认为也应该如此。但是,我找不到POSIX对此有何评论。更确切地说,问题不在于新条目是否会出现在目录流中,POSIX在这个问题上是明确的。相反,我感兴趣的是POSIX在修改文件夹后对目录位置正确性的说明。遗憾的是,注意到的readdir()手册页对此只字未提。事实上,它似乎没有被指定,也许是故意指定的。请看这里的基本原理:如果您需要真正强大的可移植性,那么最好将整个目录读入内存,而不要执行
seekdir