当前位置: 首页 > Linux

在Linux上实现自定义ls命令

时间:2023-04-07 00:33:31 Linux

以阅读联机帮助页以列出有关文件的信息(默认为当前目录)。如果未指定-cftuvSUX或--sort,则条目按字母顺序排序。可以看出,ls命令可以找出当前目录下所有文件的文件名,并按字典顺序排序并输出。ls命令还可以显示其他信息。如果加上-l选项,ls会列出每个文件的详细信息,也叫ls的长格式,在man手册中可以看到:现在在我们的终端中使用长列表格式输入命令:通过实验和在线帮助,可以知道ls做了下面两件事(ls可以判断参数指定的是文件还是目录):列出目录的内容,显示文件的信息在正式开始之前,先看看Unix是如何实现的works在磁盘上组织文件。大方块代表目录,大方块内的小方块代表文件,目录之间的连线代表目录之间的组织关系。https://www.doc88.com/p-38773...ls的工作原理看联机帮助(过程略)可以知道,从目录中读取数据与从文件中读取数据类似。opendir打开一个目录,readdir返回目录中的当前项,closedir关闭一个目录,seekdir、telldir、rewinddir与lseek类似。接下来使用man手册查询readdir(3),可以看到readdir()函数返回一个指向dirent结构的指针,该结构代表dirp指向的目录流中的下一个目录项。当到达目录流的末尾或发生错误时,它返回NULL。即readdir()读取structdirent得到目录中的记录。ls怎么写最基本的ls命令下面实现了一个最基本的ls命令//www.doc88.com/p-38773...voiddo_ls(char*);intmain(intargc,char*argv[]){if(argc==1){do_ls(".");}else{while(--argc){printf("%s:\n",*(++argv));do_ls(*argv);}}return0;}voiddo_ls(chardirname[]){DIR*dir_ptr;//记录opendir()后的返回值structdirent*direntp;//记录readdir()后的返回值if((dir_ptr=opendir(dirname))==NULL){fprintf(stderr,"ls1:cannotopen%s\n",dirname);}else{while((direntp=readdir(dir_ptr))!=NULL){printf("%s\n",direntp->d_name);}closedir(dir_ptr);}https://www.doc88.com/p-38773...运行结果:改进ls命令,增加如下函数:排序解决方法:将所有文件名读入数组,使用qsort函数对列进行排序:标准ls输出按列排列,有的按行排列,有的按列排列解决方案:将文件名读入数组,然后计算列宽和行数“.”文件:ls列出“。”Standardlsonlylistssolutionsif-aoptionisgiven:enablels1toacceptoption-a,andnotshowhiddenfileswithout-aoption-l:ifoptionhas-l,standardls将列出文件的详细信息文件,但ls1不会解决问题:下面的讨论争论