编辑: 南门路口 2014-03-02
下载 下载 附录C 习题答案 第1章1.

1 利用l s (

1 )命令中的下面两个选择项:- i―显示文件或目录的i节点数目(关于i节点在

4 .

1 4节中会详细讨论);

- d―如果参数是一目录,只列出其名字,而不是目录中的所有文件. 执行命令的结果为: $ l s -ldi /etc/. /etc/.. - i要求打印i节点的数量

3077 drwxr-sr-x

7 bin

2048 Aug

5 20:12 /etc/./

2 drwxr-xr-x

13 root

512 Aug

5 20:11 /etc/../ $ls -ldi /. /.. .和. .的i节点数均为2

2 drwxr-xr-x

13 root

512 Aug

5 20:11 /./

2 drwxr-xr-x

13 root

512 Aug

5 20:11 /../ 1.2 UNIX是多任务系统,所以,在程序1 - 4运行的同时其他两个进程也在运行. 1.3 假如p e r r o r的p t r参数是一个指针,则p e r r o r就可以改变p t r所指串的内容.所以利用限 定词c o n s t使得p e r r o r不能修改p t r所指的串.而s t r e r r o r的参数是错误号,由于其是整数类型并且 C传递的是参数值,因此s t r e r r o r不能修改参数的值,也就没有必要使用c o n s t属性.(如果C中函 数参数的处理不是很清楚,可参见K e r n i g h a n和R i t c h i e〔1

9 9 8〕5 . 2节.) 1.4 调用ff l u s h,f p r i n t f和v p r i n t f函数可修改e r r n o的值.如果它的值变了但没有保存,则最 终显示的错误信息是不正确的. 在过去开发的许多程序中,都可以发现不保存e r r n o的情况,典型的错误信息是 Not a t y p e w r i t e r(打字机不存在) .5 . 4节中标准I / O库根据标准I / O流是否指向终端设备而改变流的 缓存器.i s t t y(见11 . 9节)通常用来判断流是否指向终端设备,如果流不指向终端设备, e r r n o 可能置为E N O T T Y,从而引起该错误.程序C - 1显示了这一特性. 程序C-1 errno和p r i n t f的交互作用 执行上面的程序,结果为: $ grep BSD /etc/motd 4.3 BSD UNIX #29: Thu Mar

29 11:14:13 MST

1990 $ a . o u t open error: error =

2 工作正常, s t d o u t是一个终端 $ a.out >

temp.foo $ cat temp.foo open error: error =

25 错误 1.5 2038年. 1.6 大约2

4 8天. 第2章2.1 下面是4 .

3 + B S D中使用的技术.在 中,用大写字母定义可在多个头 文件中出现的基本数据类型.例如: # i f n d e f _ A N S I _ H _ # d e f i n e _ A N S I _ H _ # d e f i n e _CLOCK_T_ unsigned long # d e f i n e _SIZE_T_ unsigned int . . . # e n d i f /* _ANSI_H_ */ 以下面的顺序可以在这6个头文件中分别定义s i z e _ t. #ifdef _SIZE_T_ typedef _SIZE_T_ size_t;

#undef _SIZE_T_ # e n d i f 这样,实际上只执行一次t y p e d e f. 第3章3.1 所有的磁盘I / O都要经过内核的块缓存器,唯一例外的是对原始磁盘设备的I / O,但是 我们不考虑这种情况(B a c h〔1

9 8 6〕的第3章讲述了这种缓存器的操作).既然r e a d或w r i t e的数 据都要被内核缓存,那么术语 无缓存装置的I / O 指的是在用户的进程中对这两个函数不会 自动缓存,每次r e a d或w r i t e就要进行一次系统调用. 3.3 每次调用o p e n函数就分配一个文件表项,如果两次打开的是相同的文件,则两个文件 表项指向相同的v节点.调用d u p引用已存在的文件表项(此处指f d 1的文件表项),见图C - 1. 当F _ S E T F D作用于f d 1时,只影响f d 1的文件描述符标志;

F _ S E T F L作用于f d 1时,则影响f d 1及fd2的文件描述符标志. 3.4 如果f d是1,执行d u p

2 ( f d,1 )后返回1,但是没有关闭描述符1(见3 .

1 2节).调用3次dup2后,3个描述符指向相同的文件表项,所以不需要关闭描述符. 如果f d是3,调用3次d u p 2后,有4个描述符指向相同的文件表项,所以需要关闭描述符3. 附录C 习题答案5

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题