博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现自己的ls
阅读量:3947 次
发布时间:2019-05-24

本文共 1209 字,大约阅读时间需要 4 分钟。

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

最后贴上代码

!@#$%^&*~

转载地址:http://cnqwi.baihongyu.com/

你可能感兴趣的文章
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>
Android中打印代码的调用层次
查看>>
成功者十三个价值连城的习惯
查看>>
特别成功的人会做6件事
查看>>
Android: 用jni 获取MAC地址
查看>>
字符串列表的C语言实现:c_strlist
查看>>
客户沟通的方式:礼貌待客沟通方式,技巧推广沟通方式,个性服务沟通方式
查看>>
用弹性工作制留住员工
查看>>
知识=经验×反思2
查看>>
领导者如何发现关键问题
查看>>
学习无为领导力
查看>>
卓越领导看过程
查看>>
领导力与各种循环挑战
查看>>
达成谈判协议 - 避免操之过急
查看>>
销售人说话“十大忌”
查看>>
营销中的“战略非对称”
查看>>
android 如何开关Mediatek开发的Feature
查看>>
Android电话功能各部分深入探讨
查看>>
Android应用技巧总结
查看>>