gpt4 book ai didi

c - Glob 中的 "unsorted"订单来自哪里?

转载 作者:行者123 更新时间:2023-12-04 18:44:22 24 4
gpt4 key购买 nike

我一直在阅读an implementationglob并使用 Ubuntu Bionic 和 Trusty 对其进行测试。

在高层次上,我测试了一个模式,例如 /foo/*/bar使用 GLOB_NOSORT标记两个目录:

  • /foo/A/bar/
  • /foo/3/bar/

  • 是的,我知道我使用 NOSORT ,我不想排序。但是,订单是 100% 可重复的:

    每次我在 Trusty 上运行它时,我都会得到 A之前 3 ,每次我在 Bionic 上运行它时,我都会得到 3之前 A .

    glob 手册描述的行为是:

    Do not sort the returned list. By default, the list is sorted alphabetically. This flag causes the files to be returned in the order they were found in the directory.



    但是,它们在目录中的顺序是什么?这种“自然”顺序从何而来,为什么它总是可重复的,为什么它在这两个操作系统版本之间会发生变化?

    最佳答案

    自然顺序是,文件系统层从调用 getdents() 返回什么.那里的目录索引没有排序,而是在一些优化的数据结构中按名称查找。因此,理论上,枚举的顺序可以从一个时刻到另一个时刻变化。

    同样对于 ext4,您不能假设任何特定的顺序,即使它在每次调用中都是稳定的。只要没有写入任何内容,它通常是稳定的,但即使这样也不能保证。

    内核版本的差异还涉及对 ext4 代码库的大量修改;我想很难(但并非不可能)在某处发现代码中的差异,这就是您观察到的顺序不同的原因。

    关于c - Glob 中的 "unsorted"订单来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59191889/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com