Speedrunning代码,这是我在C语言中录制基本ls时重新学习的3件事

你好朋友,

今天,我想回顾一个学生必须要做的项目,当时我挣扎了很多,发现这个项目很无聊。

基本上,我必须使用-l -r -R和-a选项开发ls,并且仅使用malloc,free,write,stat,ctime,time,getpwuid,getgrgid,readdir,opendir和closedir。

和往常一样,我想再次挑战自己以重写一些C。起初,我告诉自己,作为一个老C开发人员,这将是一个简单的2个小时的项目,但是天哪,事实并非如此。 我花了大约5个小时来编写我不为之骄傲的代码,而不允许使用sprintf节省了我的时间。 它仍然需要大量测试,内存泄漏查找和重构(它总是需要:))。

但是,是的,这是一个很棒的基础项目。 我建议任何想要学习C开发,学习基本算法和内存处理的人尝试一下。

至少您会学到三件事。

1.处理内存

用没有垃圾收集器的语言重写代码可能会很麻烦。 很难跟踪所有分配的内存以在以后释放它。 但是过了一会儿,这样做真的很愉快。 您确实可以热衷于性能,并只为满足最佳算法的需求分配最少的内存。

GDB是一个很棒的工具,可以帮助任何人调试C代码,但是一般来说C语言调试起来很慢,因此,使C程序正常工作的最佳方法是在编码之前认真考虑。

2.数据结构

在C语言中,仅给出基本功能,就没有很好的字符串/数组/哈希/链表功能。 太疯狂了

我开始使用简单的字符串解析来完成所有数据结构化工作,然后进行排序非常麻烦,因此我研究了链表数据结构。 相当简单,但是添加-删除-排序是基本的,但是对于启动算法学很有用。 例如,最好了解Ruby中的某种排序背后的含义。 您对什么是性能以及可以使用的不同种类有一个更好的了解。

您将需要解析字符串,将字符串转换为整数,将整数转换为二进制字符串等。大量的操作会导致大量错误,随着重构时间的推移,这些错误会减少。

要在C开发一个大的图片是很重要的,而不是急于结果,因为你不会有任何结果,但“游戏结束了,您的代码段错误 ,请重试”

这部分对于-R(递归)选项确实很重要,就像您只是按照看到的那样打印时,将算法应用于文件夹内的文件夹是不可能的:)

3.什么是ls,以及什么是Unix中的访问权限

生活中使用过unix终端的每个人都知道ls是什么,以及它的用途。 但是ls有很多选项可以格式化数据并将其用于脚本。

例如,最知名的ls -l将为您提供一个类似于

总共40
-rw-r — r — 1个poilon人员41 22七月13:55 Makefile
-rwxr-xr-x 1 poilon员工14248 22七月13:58 c_ls

在进行编码时,您将对它的工作原理有更好的了解。 读写执行权限,链接数,所有者:用户和组等。

对于刚进行开发训练并且每天都不使用基于Unix的系统的人来说,这无疑将是有用的。

当我使用ls -alRr时,这个项目使我感到非常满意。 我将其视为游戏的快速运行,并且在5h和12m内运行了ls -alRr。 现在我真的好累!

重做一些C确实很有趣,很愉快,而且我确信无论如何它使我成为了更好的开发人员!

希望您喜欢阅读的书,告诉我您的想法,以及如果您要我做此类挑战的流媒体/ YouTube版本,或任何其他格式。

Speedrunning代码,这是我在C语言中录制基本ls时重新学习的3件事

From: https://hackernoon.com/speedrunning-code-the-3-things-i-re-learnt-while-recoding-a-basic-ls-in-c-d559b0f1a92b