在 CentOS 系统中,readdir()
函数用于读取目录中的文件和子目录。默认情况下,readdir()
返回的文件名列表是按照字典序(lexicographical order)排序的。这意味着文件名会按照字母顺序进行排序,数字部分会被当作字符串处理。
例如,如果你有一个目录,其中包含以下文件:
file1.txt
file10.txt
file2.txt
file3.txt
使用 readdir()
读取这个目录时,返回的文件名列表将如下所示:
file1.txt
file10.txt
file2.txt
file3.txt
请注意,数字部分并没有按照数值顺序排序,而是按照字符串顺序排序。
如果你需要对目录中的文件进行不同的排序方式,你可以在调用 readdir()
之后,使用自定义的排序函数对返回的文件名列表进行排序。例如,你可以使用 qsort()
函数和自定义的比较函数来实现数值顺序排序:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
int compare(const void *a, const void *b) {
int num_a = atoi(*(const char **)a);
int num_b = atoi(*(const char **)b);
return num_a - num_b;
}
int main() {
DIR *dir = opendir(".");
struct dirent *entry;
char *filenames[10];
int i = 0;
while ((entry = readdir(dir)) != NULL) {
filenames[i] = strdup(entry->d_name);
i++;
}
qsort(filenames, i, sizeof(char *), compare);
for (int j = 0; j < i; j++) {
printf("%s\n", filenames[j]);
free(filenames[j]);
}
closedir(dir);
return 0;
}
这个示例程序会读取当前目录中的文件,并按照数值顺序对文件名进行排序。