《TCP/IP详解 卷2:实现》 —1.2 源代码表示
1.2 源代码表示
不考虑主题,列举15 000行源代码本身就是一件难事。下面是所有源代码都使用的文本格式:
1.2.1 将拥塞窗口设置为1
387-388 这是文件tcp_subr.c中的函数tcp_quench。这些源文件名引用4.4BSD-Lite发布的文件,它们在1.13节中讨论。每个非空白行都有编号。正文所描述的代码的起始和结束位置的行号记于行开始处,如本段所示。有时在段前有一个简短的描述性题头,对所描述的代码提供一个概述。
这些源代码同4.4BSD-Lite发行版一样,偶尔包含一些错误,在遇到时我们会提出来并加以讨论,偶尔还包括一些原作者的编者评论。这些代码已通过了GNU缩进程序的运行,使它们从版面上看起来具有一致性。制表符的位置被设置成4个栏的界线使得这些行在一个页面中显示得很合适。在定义常量时,有些#ifdef语句和它们的对应语句#endif被删去(如:GATEWAY和MROUTING,因为我们假设系统作为一个路由器或多播路由器)。所有register说明符被删去了。有些地方加了一些注释,并且对一些注释中的印刷错误做了修改,但代码的其他部分被保留下来。
这些函数大小不一,从几行(如前面的tcp_quench)到最大1100行(tcp_input)。超过40行的函数一般被分成段,一段一段地显示。虽然尽量使代码和相应的描述文字放在同一页或对开的两页上,但为了节约版面,不可能完全做到这样。
本书中有很多对其他函数的交叉引用。为了避免给每个引用都添加一个图号和页码,文前插页中有一个本书中描述的所有函数和宏的字母交叉引用表和描述的起始页码。由于本书的源代码来自公开的4.4BSD_Lite版,因此很容易获得它的一个拷贝:附录B详细说明了各种方法。当你阅读文章时,有时也能帮助你搜索一个在线拷贝[例如Unix程序grep(1)]。
描述每个源代码模块的各章通常以所讨论的源文件的列表开始,接着是全局变量、代码维护的相关统计以及一个实际系统的一些例子统计,最后是与所描述协议相关的SNMP变量。全局变量的定义通常跨越各种源文件和头文件,因此我们将它们集中到的一个表中以便于参考。这样显示所有的统计,简化了后面当统计更新时对代码的讨论。卷1的第25章提供了SNMP的所有细节。我们在本文中关心的是由内核中的TCP/IP例程维护的、支持在系统上运行的SNMP代理的信息。
- 点赞
- 收藏
- 关注作者
评论(0)