在上一篇博文《文件和目录》中,讲述了相关概念、原理与系统调用接口函数。这篇就要来利用这些函数动手写一个 ls 命令。
一. ls 命令
ls 命令(list)默认的动作就是找出当前目录中的所有文件的文件名,并按照首字母顺序排序后输出。如下图所示。
ls 还可以带很多的参数选项,例如ls -a 表示显示全部文件,包括隐藏文件(以 . 开头的文件)。ls -l 表示显示每个文件的详细信息。如下图。
由图可知,ls -l 列出了 7 组信息,分别是:
文件类型和许可权限,链接数,所有者,组,大小,修改时间,文件名。
我们的任务就是编写一个ls -l 的命令。
二. 编写 ls
1. 读文件名
要读目录中所有的文件名,就要用到《文件和目录》所提到的,与目录相关的函数(opendir, readdir, closedir)。
DIR * dir_ptr;
struct dirent * direntp;
dir_ptr = opendir(dirname); //读目录,返回一个流(类似与文件描述符)
if (dir_ptr == NULL){
printf("open error!\n");
return -1;
}
while ((direntp = readdir(dir_ptr)) != NULL) //读目录项,就是目录里的文件。
{//readdir指针自动增加,挨个文件读
printf("%s\n",direntp->d_name); //显示文件名