温馨提示×

debian readdir怎么排序结果

小樊
34
2026-09-28 12:37:58
栏目: 智能运维

在 Debian(或者说 Linux 下 C 语言编程)里,readdir() 本身不会排序,它返回的是目录项在底层文件系统中的顺序(通常是哈希或无序的)。
如果你想要“排序结果”,通常有以下几种做法。


一、最常用:readdir 读取后自己排序

示例(按文件名排序,C 语言)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>

int compare(const void *a, const void *b) {
    return strcmp(*(const char **)a, *(const char **)b);
}

int main() {
    DIR *dir = opendir(".");
    struct dirent *entry;
    char **names = NULL;
    int count = 0;

    while ((entry = readdir(dir)) != NULL) {
        names = realloc(names, sizeof(char*) * (count + 1));
        names[count] = strdup(entry->d_name);
        count++;
    }
    closedir(dir);

    qsort(names, count, sizeof(char*), compare);

    for (int i = 0; i < count; i++) {
        printf("%s\n", names[i]);
        free(names[i]);
    }
    free(names);
    return 0;
}

✅ 优点:可控(可按名、时间、大小排序)
❌ 缺点:代码稍多


二、用 scandir()(最推荐)

scandir() 直接返回排序后的结果

#include <stdio.h>
#include <dirent.h>

int main() {
    struct dirent **namelist;
    int n = scandir(".", &namelist, NULL, alphasort);

    for (int i = 0; i < n; i++) {
        printf("%s\n", namelist[i]->d_name);
        free(namelist[i]);
    }
    free(namelist);
    return 0;
}
  • alphasort:按字母排序
  • versionsort:按版本号排序(Debian/GNU 扩展)
  • 第三个参数可过滤文件(如只列 .txt)

✅ 最简单、最常用


三、Shell 层排序(非 C)

如果你是脚本或命令:

ls -1 | sort
ls -t      # 按时间
ls -S      # 按大小

四、常见排序方式对比

方式 是否排序 说明
readdir ❌ 需手动排序
scandir ✅ 推荐
ls ✅ 用户态

五、总结建议

  • C 程序:用 scandir()
  • 必须自己控制逻辑:readdir() + qsort()
  • 脚本:ls | sort

如果你告诉我:

  • 用 C / C++ / Shell?
  • 按名字 / 时间 / 大小?

我可以直接给你完整示例。

0 踩