读C程序设计第八章有感

 我一直欣赏Brian W.Kernighan编写的教材和计算机类书籍,这一次恰好有机会我不得不从编写教材的角度来审视这个问题,所以,今天我就谈一谈我对C语言编程第八章Unix系统接口的理解,当然,这部分内容对我们大家都很熟悉,我关注的是编写教材的思路。

首先,毫无疑问这一章的标题是一个很大的范畴,所以,从内容上来看他是如何侧重的,或者说如何和C语言应用挂钩的。

这一章分成七个小节,内容上是如何排序的呢?
从文件描述符这个基本的概念讲起,然后从输入输出的角度,引入了第二节底层的IO,read和write,第三节说除了标准的输入输出外,其他的文件读写前都要显示的打开,所以,有open,creat系统调用,与之相对应的API就是close和unlink.第四节提到了前面默认的一个知识点,就是认为读写是顺序进行的,从实际的角度来说,当然可以随机的选择,这样lseek的出现,顺理成章。

前面四节,基本上把文件IO的API都说明了,第五节呢,为了加深对文件IO的理解,更或者说知道C标准库是基于系统功能实现的,所以用底层的IO来实现了fopen和getc函数的实现,从这部分内容来说,基本上打通了从标准库函数和系统调用之间的障碍。当然从某些方面说,这个例子给人的感觉不够循序渐进,似乎也不管学生的基础如何,显得有些突兀,但是从原理上来说,确实直入重点。毕竟对文件IO操作,最好的例子莫过于标准库函数的功能。即使这个例子不能很方便的作为实验用例也无妨,毕竟切入了重点。

前面仅仅是针对常规文件的操作,既然我们说目录也是文件的一种,那么对目录的操作也是理所当然的,这里引入的是一个计算文件大小的例子,个人觉得从难度上讲,远远的超出了前面的内容,但是,而且也复杂很多,但他也是从文件IO的角度来解释这个问题,我不知道,我们是否以应用这几个函数为重点还是也应该从原理上来分析opendir,closedir等等。
(原则上,从我们的观点出发,应该是从应用为主,但是这不妨也成作为文件IO的例子也无妨,我们在完成了这几个例子之后,在引入GNU/Linux提供的函数也算顺理成章)

最后一节还是从原理上来分析内存分配函数和释放函数,我们当然先必须引入Linux/Unix的地址空间,并把sbrk,brk都介绍完毕,而且在C语言的课程中我们也要先阐述清楚了malloc/free的用法之后再来从原理上弄清楚内存分配,这也不算是一件坏事。而且这部分的内容是重点复习了链表操作,把前面的C语言的知识更加固了。

现在回想一下,本章的结构和标题似乎非常的切合,系统接口,上面是库函数,下面是系统调用,本章就是教你如何用系统调用构建库函数,不是吗?这不正式接口吗?

再回想一下握自己要开发的课程,Linux系统程序开发,难道不正是用系统调用来开发自己的库函数吗?这一章也完全的复合要求,当然,我觉得在目录操作这一块我们是否应该添加一些内容。

最后一部分,我们还是要从内容上来看,我们应该怎么组织语言。
文件描述符,作者很简单,就是从输入输出0,1,2来说,最后说了一下0,1的重定向问题,压根就没有提高更深入的东西
低级IO,也就是用getchar这样的从键盘接受输入,向屏幕打印,重点是放在read,write
然后才提到其他文件,引入open,详细的介绍了这个函数外,还把printf与vprintf的可变参数问题介绍了。最后才提到随机访问的问题,最后就是两个复杂的例子,对文件的IO,和对目录的IO。
最后一节,无论怎么看,他都是独立的。我也没有仔细的阅读,但是我们就应用方面来说,必须对它加以补充。

你可能感兴趣的:(读C程序设计第八章有感)