From: quntmec@hotmail.com
To: qf.hao@hotmail.com
Subject: 关于《UNIX技术内幕》的勘误及遇到的问题_18
Date: Sat, 31 Dec 2011 17:09:43 +0800
郝先生,
新年快到了,先预祝你在新的一年里身体健康,心想事成。
对于《UNIX技术内幕》,我还有些疑问,如下:
1、348页,cinit()函数的最下面一行:
for (cp=(ccp+07) & ~7;...)
对于这个 (ccp+07) & ~7 操作不太明白...
[郝]: 本意是取ccp按8字节对齐的下一个地址,比如ccp=8,那么cp=8,ccp=10,那么cp=16。因为cblock的大小是8字节,那么cfree应该是8字节对齐。
但是这其实应该是编译器做的事情,而不需要程序来做对齐,所以这里我也是不太明白。也许是当时编译器的限制?
2、355页,canon()函数的第30和31行,看书的注释是行删除的功能。但个人感觉有些疑惑,例如:如果
已输入多行(每行的字数不定),且已达到cannob[100]的上限了,这时如果想删除当前行,那其不是将前面所有行一并删除了?(因为第31行会跳转
回第16行(loop处),在第17行就会重置bp)。
[郝]: cannob中存储的只有一行数据,因为当用户在窗口输入回车的时候,输入到cannob中的字符才会被处理
3、369页,对于partab[],它是如何与 maptab[]中的元素一一对应?不太看的明白里面说的“partab为maptab中的每一个字符对应设置了奇偶掩码值“。
[郝]: 建议你先查一下奇偶校验的含义。这里应该不难懂。
4、371页,代码第69~74行,ctype为何是“终端类型“? 参看349页,(t_flags>>8)&03 取的应该是 t_flags 的第8位和第9位。
同时371页,代码104~106行,c应该理解为“字符”还是“延迟时间“?
[郝]: 是的,第8、9位是NLDELAY宏,也就是表示用来计算延迟时间的某个具体设备号。c是延迟时间。
5、405页,代码里倒数第2个if语句,即:
if(c & 0x40)
{
printf("缺纸");
.......
}
根据402页的 图9-32,应为0x20(第5位,即数字12处)
[郝]: 对!谢谢!
6、
406页的9.4.3节里面的打印程序,能否解释的更详细一些呢?例如,opcode[],我的理解是存放待打印数据的缓存,但为何除了存放待打印数据外
还有其他的设置信息?如:407页开头(if语句下
面),opcode[0]=0x1b,opcode[1]=0x43,opcode[2]=0x60(按照注释是设定行数用的)。是否由于篇幅所限的原因
而省略了一些有关程序内容介绍的信息?
[郝]: opcode是放置打印数据和控制字符,因为打开的是设备文件/dev/para1。事实上这里的代码SimplePrint是把驱动程序和打印数据程序揉合起来了。
7、409页,代码第8~9行,我的理解如下:
u.u_offset内存放的是 虚拟内存 的地址,因此根据 34页 图3-11,bn为BLOCKNO(块号),on为DIB(块内偏移)。是这样理解吗?
[郝]: 对。
另,第16行代码:
UISA->r[0] = (ka6-6)->r[(bn>>7)&07] + (bn & 0177);
这句代码该如何理解?为何这样设置对应内存块地址?
[郝]: 这里是设置用户虚拟寄存器UISA的值。(ka6-6)是KISA0寄存器。
8、410页,mmwrite函数的倒数第9~10行,即:
UISA->r[0];
UISD->r[0];
这2句代码是什么意思?
个人感觉,应该是:倒数第12~13行代码应改为:
a = UISA->r[0];
b = UISD->r[0];
这样先保护现场数据;而倒数第9~第10行应改为:
UISA->r[0] = bn;
UISD->r[0] = 077406;
不知道我的理解对不对?
[郝]: 对,这里是排版错误,谢谢你的纠正!如果再碰到类似错误,请参考光盘中的源文件。那里应该是正确的。
此外,勘误如下:
|
|
|
|
356 |
1 |
6 |
(...参见7.1.3节...)应是 9.1.4的(3) |
363 |
|
|
代码第1行,ttinput(ac,atp),应是 ttyinput |
368 |
|
|
最后一段第3行:“位(最高位——位8)...“,应为 位7 |
370 |
|
28 |
colp=”({})!|^~'`”,应为“({)}...” |
373 |
|
|
中间代码处,函数名xint(dev),应为 klxint |
382 |
|
|
在节4.prdev下面,“函数原型:void printf(...”,应为 prdev |
[郝]: 谢谢纠正。
Steve
《返璞归真--UNIX技术内幕》在全国各大书店及网城均有销售:
阅读(5491) | 评论(0) | 转发(0) |