实现自己的ls

相信在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 显示光标

最后贴上代码

github

!@#$%^&*~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值