相信在linux上最常用的命令之一应该就是ls了,因为我们可能随时都要知道文件或者目录的相关信息,而小组暑假留校的第一个小项目就是完成自己的ls,最终自己实现的ls具有-a,-l,-R,-r,-d以及染色输出不同权限的文件或是目录.
自己觉得需要注意的
1.在动手实现项目前自己要有一个大体的架构(我开始是依照书上的架构进行的,但越往后写自己会添加更多的功能,而且每个人的编程风格可能会存在一些差异,所以尽量只是参照书上大体的架构即可).
2.书上有一个排序是用冒泡排的,我对排序进行了一些优化,用快排,另开一个数组存放他们的下标,比较后只交换该数组(只交换下标).
3.display_dir()下会有一个存放当前目录下所有文件名的字符数组,开始我用的是静态数组,在测试一些小的目录还可以,但要是对 / 或着 /home 使用-R,会马上崩. . .,后来改成动态分配空间,情况就好了很多,但现在还有一个bug就是对 / -aR 的话会段错误???应该采用链表来存储情况可能会更好.
4.-R 的实现(我的-R 也不是很完美. . .),但是大体上的思路应该是没有问题的,我的思路是:如果含有-R 参数的话,先遍历当前目录,然后判断该目录下是否还存在目录,如果存在就递归调用.(需要跳过 . 和 . . 两个,如果不跳过的话会陷入死循环,还有注意如果还有 -a 参数,记得不能跳过其他的隐藏文件).
5.-a,-l,-r-d 都是比较好实现的,我这里就不再多提了.
PATH_MAX
这是c语言运行是库中通过#define 定义的一个宏常量(直接用就行),定义了编译器所支持的最长全路径名的长度(4096).
printf染色输出
printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
printf("\0e[字背景颜色;字体颜色m字符串\0e[0m" );
两种效果是一样的,
字颜色: 30–37
30: 黑
31: 红
32: 绿
33: 黄
34: 蓝
35: 紫
36: 深绿
37: 白色
背景颜色: 40–47 (与字颜色对应 40–30. . . )
ANSI控制码:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m – \033[37m 设置前景色
\033[40m – \033[47m 设置背景色
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
最后贴上代码
!@#$%^&*~