转载时请注明出处和作者联系方式:http://blog.csdn.net/mimepp
作者联系方式:YU TAO <yut616 at sohu dot com>
关键字: ls, cmd, dir, freedos, busybox
在各个不同的系统中,对文件名的排序有着不同的实现,这里做个记录。
现象:
11.txt
5.txt
对这两个的排序,linux会将 5.txt 排在 11.txt 后面,这个结果对非电脑爱好者,就很奇怪了,5应该比11小,却排在了后面。
1、busybox
轻量级的 busybox 的实现,就是直接用了 strcmp
coreutils/ls.c
static int sortcmp(const void *a, const void *b)
2、linux shell 里 coreutils
coreutils-7.4/src/ls.c
#define DEFINE_SORT_FUNCTIONS(key_name, key_cmp_func)
也是使用的 strcmp
3、freedos 里面,dir 命令,如: dir /ON
freecom/cmd/dir.c
qsort(orderIndex, orderCount, sizeof(orderIndex[0]), orderFunction);
static int orderFunction(const void *p1, const void *p2)
同样也是用的 strcmp
4、windows cmd
也一样,结果是 11.txt 排在了 5.txt 的前面
5、windows explorer
windows xp版本以后,5.txt 排在了11.txt 前。
也就是说,是将文件名中的数字是以数字来进行对比,而不是将数字作为字符来对比。
而且,cmd 和 资源管理器 结果还居然是不同的。
可以参考:
http://blogs.msdn.com/b/michkap/archive/2005/01/05/346933.aspx