1.命令参数及其说明
ls:显示当前目录下的所有文件(不含隐藏文件)
ls -a:显示当前目录下的所有文件(含隐藏文件)
ls -l:显示当前目录下的所有文件的详细信息
ls -R:显示当前目录下的文件及其子目录下的所有文件
2.实现过程中遇到的问题
1.无法根据文件名获取正确的文件信息
解决:获取文件信息的文件名应该是绝对路径,而非简单的文件名
2.在显示时间信息之后自动换行,导致文件名和时间信息无法在同一行输出
解决:buf_time[strlen(buf_time)] = '\0';
3.输出存储权限的数组在输出时会出现乱码
解决:存储权限的数组在定义时没有初始化!!! 祝一迪呀! 什么时候才能把数组初始化这点记住!!!
4.无法得到正确的当前目录
解决:对getcwd的认识还不够,为此我做了测试,在此链接github上的源码,以便日后复习
getcwb的链接:
getcwb_test.c
5.在实现ls -R的时候递归会进入死循环
解决:当ls -R的时候,第一个和第二个检索的目录就是.和..这两个目录,即当前目录和当前目录的上一级目录,如果不排除.和..这两个目录文件,将无法继续递归到其他的文件.
所以要把这两个文件排除掉
6.递归时不能正确存储子目录下的文件信息
解决:在数据上,应该一次将可能输出的数据都得到并存储,之后不同参数下的不同输出只是对数据的不同处理.而存储数据可以用结构体数组,这时不能将结构体数组设为全局变量,
应该设为局部变量,方便递归调用.
3.源码
源码的链接:
my_ls.c
4.总结
通过编写ls这个命令,让我再一次明白在写程序之前把思路理清,需求列好有多重要!!!
程序框架一定要一次性建好,并且要完整地分析整个程序的运行过程,不能值分析一半或只分析一部分
需求也要一次性列好,不能编写边加,否则新的需求可能会冲击之前建好的程序框架,必要时就需要重构
还有,感受最深的可能就是,代码一定要git!!!rm时一定要保持清醒.但是,毕竟每个程序员都会遇到这样的情况,千金难买经验和教训,以后做事情就要更加谨慎,也要养成代码git的好习惯
反正呢,这也是一个不容易的过程,每一次写代码都是一个积累的过程
感谢朱新全学长耗费了很久的时间和我一起调bug,教我使用gdb
生命不息,奋斗不止,以后还有许许多多像这样的日子
共勉