在 Debian(以及一般的 Linux)下,readdir() 本身不会排序,它返回的是目录中文件的“原始顺序”(通常是文件系统内部顺序,看起来像乱序)。
如果你想要排序文件列表,常见做法有下面几种:
readdir() + 手动排序(C 语言)readdir() 返回 struct dirent,你需要:
qsort() 排序#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[1024];
int count = 0;
while ((entry = readdir(dir)) != NULL) {
names[count++] = strdup(entry->d_name);
}
closedir(dir);
qsort(names, count, sizeof(char *), compare);
for (int i = 0; i < count; i++) {
printf("%s\n", names[i]);
free(names[i]);
}
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;
}
✅ 默认按字母排序
✅ 不需要手动 qsort
如果你只是想在命令行里排序:
ls -1 | sort
或:
ls -1 /path | sort
| 场景 | 方法 |
|---|---|
| C 程序 | scandir() |
| C + 自定义 | readdir() + qsort() |
| Shell | `ls |
| 按时间 | ls -lt |
| 按大小 | ls -lS |
如果你能告诉我:
我可以给你更精确的示例。