UNIX高级环境编程-初读心得

写在前面

大概从7月中旬~10月10中旬,花了大概三个月左右的时间,通读了《UNIX高级环境编程》第1章到第20章。读之前的状态大概是只懂一点linux命令行,c语言入门水平。通读的过程大概就是每天早上花1至2个小时,对于书中的一些代码,尽量都照着抄了一遍,写了一些对代码的理解在上面。学习过程中我个人觉得有一些章节读起来就比较枯燥,而有一些章节读起来则津津有味。因为就读了一遍,所以经常会有前面的知识点忘记了的情况,这时也只能简要的将知识点抄在后面用到的地方。总的来说,收获还是有的。

目的

这篇文章一是记录一下我翻完了这本书,二是对这本书的每一个章节针对自己目前脑海中的印象写一个简单的summary。

正文

第1章 & 第2章

主要讲了UNIX基础知识以及UNIX历史标准这些,第2章读起来很枯燥,这两章都很简单。

第3章 文件I/O

不同于之前在C语言中接触的scanf与printf,又或者是C++中的cin与cout,本章主要讲述的是不带缓冲的文件I/O。主要包括open,read,write,lseek,close,dup,fcntl这些函数。介绍了贯穿整本书的文件描述符的概念(区别于标准I/O中的FILE指针),UNIX中打开文件的内核数据结构(进程表项,文件表项,v节点表项等)。

第4章 文件和目录

本章主要描述文件系统的其他特征和文件的性质,主要是stat结构,包括文件类型(软硬链接),各种ID(设置用户ID位)以及由ID所限制的文件访问权限,比如对chmod,chown这些函数有了一个更深的认识。

第5章 标准I/O库

较详细的介绍了缓冲,之前也有所了解但没有深入了解过,以及就是大家常用的C语言scanf,printf等等。第3章中的函数都是围绕文件描述符的,而标准I/O库的操作都是围绕流stream的,而流常通过一个FILE指针来描述。

第6章 系统数据文件和信息

这一章我看过就忘记了,基本没有很深的印象。如果以后需要补充相关知识了可以再来读一遍。主要讲了口令文件和组文件,阴影口令,关于时间和日期一些有关的函数。

第7章 进程环境

这一章主要是程序的执行时的前世今生,比如main函数,进程终止,重点有C程序的存储空间布局(数据段,堆,栈等等),函数setjmp与longjmp也是第一次接触给我留下了很深刻的映象,结尾的习题中也有解释为什么不能反悔局部变量的指针。

第8章 进程控制

我觉得算是渐渐有意思起来了,函数fork一个进程返回两次觉得相当神奇,fork之后父子进程毫无关系,这就涉及到了后面的进程同步和进程间通信,函数exec等。

第9章 进程关系

这一章初读也是没什么映象,以至于后面用到会话,setid什么的印象都不是很深刻。

第10章 信号

信号是软件中断,这一章也算比较重要的了,读起来也比较有意思。函数signal的定义还是很复杂的,之前也很少接触过什么指向函数的指针。

第11章 线程

多进程,一个进程内可以开多个线程,线程创建,重点线程同步(互斥量,条件变量,屏障等等)。

第12章 线程控制

线程属性,读了但映象不深。

第13章 守护进程

守护进程daemon是生存期长的一种进程,没有控制终端在后台运行。有一个daemonize函数后面用到,但是我那个程序怎么运行出错怎么理解都不对最后也懒得debug了。

第14章 高级I/O

非阻塞IO,记录锁,听说比较重要的IO多路转接(select, poll以及我还没有看过的epoll),readv与writev,这些在后面的进程通信中也常用到所以还是有一点印象。

第15章 进程间通信IPC

读这一章的时候挺激动的,因为一直都觉得IPC非常重要,所以读的时候就想终于学习这一部分知识了让我来会会你。经典IPC:管道,后面在UNIX域套接字中经常用到;FIFO,命名管道,两个非相关进程也可以通信;消息队列,信号量以及共享存储等等。

第16章 网络IPC:套接字

跟读15章一样的心情,原来套接字就是所谓的socket通信,通过套接字描述符来进行操作,本章的代码比较可惜的是都没有运行,只是抄了一下,理解了一下。如果再次读可不能这样。

第17章 高级进程间通信

UNIX域套接字,类似于全双工管道,接触了服务器与客户机端的socket访问大概的编程样子,感觉还行。

第18章 & 第19章

终端 & 伪终端,其中伪终端又常用于网络登录于是又顺带着复习了第16,17章。

第20章 数据库编程

本章是作者写的一个小型可以处理并发的数据库系统,并且有源码讲解,敲是不可能敲的了,只能稍微看看装装样子。看着看着就晕了,晕着晕着就看不下去了。

最后

写出来发现自己好像啥都没学会,就好像走马观花。接下来一个半月的时间换个口味,读一下陈硕老师的《Linux多线程服务端编程》,同时上Coursera学习一下操作系统原理这门课。

你可能感兴趣的:(Linux)