NEMU代码导读

如何读代码

拿到一个项目,先看看目录结构,比如tree,

find . -name "*.c" -o -name "*.h"

指令和字符串,shell指令使用C语言实现,是对字符串的处理。-o 为或。这个命令输出了项目里的源文件,

查看代码行数

find . -name "*.c" -o -name "*.h" | xargs cat | wc -l

xargs把前面的标准输出(路径和文件名)作为标准输入作为参数给到到cat

读C语言代码,可以从main开始

尝试读代码,从main开始。那么这个文件在那里呢?

IDE搜索文件,命令行可以直接用vim打开目录。

grep -n main $(find . -name "*.c")

把$之后的命令的结果作为输入

能找到我们需要的main函数了。

关于工具,一个用来模糊查找文件shell工具,fzf。这个工具可以弹出命令行菜单,有意思的用法,可以放在命令行的参数里:

vim $(fzf)

unix世界的惊喜是所有的东西都可以组合,可以用$()来把命令的输出粘贴到参数里,也可以用管道把一个程序的输出作为另一个程序的输入。

使用计算机,实际上随时都在编程。Ubuntu手边的工具,不像VSC一样主动,随时随地弹出一个消息框提醒该安装东西了。虽然没这么贴心,但是命令行工具一直都在那里,他不会主动推销任何东西。

所以需要学习者主动去开源社区寻找,去发现。这种感觉可能像是在Geeker的道路越走越远,但实际上是在professional的道路上越走越远。一个优秀的开发者一定是一个power user。

找到main了,找里面的函数,这又该怎么找呢?当然直接使用IDE编译以后跳转也没有任何问题。但如果想坚持在命令行里操作呢

如果希望一个函数去解析主演书传入的参数,那么可以定义和main相同的参数。这在rtt的指令导出里用到了。这里来看看argcargc是啥

argv是指针的指针,argv指向了一个指针数组,即argv里的地址是一个数组的起始地址。这个指针数组里面的指针又指向一系列字符串的位置。

这个函数看起来是处理指令的。

default会去打印一个使用方法。

这里有一些很有意思的东西,可以试着看看。linux有个函数是getopt

命令行输入man getopt,得不到想要的,输man getopt_long。翻到最后有个see also。

可以输入man 3 getopt一样的,。

这里可以看到一小段程序:

如果读过这个手册,就可以理解这些代码的含义了。可以理解unix如何设计api是帮我们完成事情的,而且这是一种内在的通用原则,了解了如何实现指令,在自己使用的时候,更有感觉。

最后更新于