《Unix-Linux编程实践教程》读书笔记(一)

 

写在最前:

         第一遍:零零散散的花了近两个月的时间读了本书的第一遍,这是一本很适合刚刚掌握一些计算机基础知识的人读的书。学习的思路非常明确,能做什么?怎么做?自己动手?三个方面符合认知顺序,由浅入深让人易于接受;而且每章的内容相对独立和简单,适合初次接触类Unix系统编程的人员逐个了解和实践。总之,从难易程度而言,也许这本书真的很适合作为APUE的前奏。


第一章  Unix系统编程概述

1.      学习思路:本书主要通过分析Unix系统具体功能(Unix命令),分析功能实现所使用的系统调用(函数),进而指导读者自行编写相应的编程实现,来学习Unix系统编程。


2.      使用图示来说明系统或者子模块的模型,这样的方式可以很直观的描述结构

系统模型的一步一步复杂化,使得出现了内存用户空间、内核空间的区分,在不同的空间中运行着普通程序,和内核程序;

内核程序的职能也进一步被确定。


3.      操作系统(也被称作内核)负责将不同的用户、设备、应用程序连接起来。内存分为用户空间和内核空间,其中内核空间是上述各部分连接的中枢。


4.      编写上层应用程序的时候,感觉像是应用程序直接操作设备,但其实中间有透明的操作系统提供的支持。操作系统编程,需要知道系统的结构和工作方式,要知道内核提供哪些服务,如何使用它们,系统有哪些资源和设备,不同的设备和资源如何操作等。


5.      系统资源:处理器、输入输出、进程管理、内存、设备、计数器、进程间通信、网络。


6.      如何理解包含上述系统资源的系统服务的机制:三个问题来学习(学习思路的具体化)。

1)  分析程序:了解程序的功能和实现原理。

2)  学习系统调用:程序中用到哪些系统调用、每个系统调用的功能和使用方法。

3)  编程实现:使用学习的实现原理和系统调用编程实现相同的功能。


7.      从用户体验的角度来理解Unix

1)  登陆与注销:用户登陆时,系统启动单独的一个shell进程来处理该用户的请求(多用户环境);用户注销时,系统结束分配给该用户的shell进程。

2)  目录操作:目录树(组织结构、各个子目录的特定用途)、目录操作命令(ls、cd、pwd、mkdir/rmdir、)、目录操作命令的工作原理(涉及到系统怎么保存描述目录树的信息,以及不同目录操作命令对应的对这些信息的修改)。

3)  文件操作:文件操作命令(命名规则、cat/more/less/pg查看文件内容、cp文件复制、rm文件删除、mv文件移动或重命名、lpr/lp文件打印)、文件操作命令的工作原理(同样涉及到系统怎么保存文件的控制信息和文件的数据信息,以及不同的文件操作命令对应的对这些信息的修改)、文件许可权限(怎样查看文件的许可权限,文件权限具体指什么,怎样修改文件许可权限,文件许可权限的工作原理即什么时候怎么使用该文件权限信息)。


8.      从系统的角度来理解Unix

1)  以网络桥牌的例子说明系统要实现其各个组成部分之间的协调统一(通信、协作、网络访问)。

2)  bc---Unix计算器、ps命令的使用、man联机帮助的使用、逆波兰表达式、bc和dc通过管道进行协作、dc基于栈的工作原理。

3)  从bc/dc到Web:用户端和服务器。

独立程序之间的链接、信息共享、协作是系统中的重要部分。


9.      动手实践(more命令三个步骤的分析)

1)  实际使用more命令来显示文件内容(三种使用情景),观察执行的细节。

2)  more的实现过程(伪代码)

3)  more的编程实现。

读懂代码的标准是自己能够理解程序运行的原理,代码的逻辑,能够自己编写相同的代码。RTFSC(何况本书中的代码不是很Fucking哦)!CODING

more01.c大概实现了more程序的基本功能;more02.c处理了重定向时标准输入被覆盖的处理方式(从/dev/tty直接读取用户的输入);但是,对于键盘输入不要回显、在输入q和空格的时候不需要按Enter键、显示当前显示占文件大小的百分比、不同终端(vt100等,这个在sourceCRT中选择终端类型时见过)的处理等在后续章节学习。

熟悉系统调用:fopen(),flose(), fgets(), fputs(), getchar(), getc()


10.  工作步骤与概要图

1)  工作步骤总是按照之前说明的三步进行:分析程序原理、学习系统调用、编程实践。

2)  Unix概要图:系统各部分进行协作的中枢是内核,内核及其数据结构存放在内核空间。

3)  Unix的发展历程。

 

11.  小结

Unix内核对资源和程序进行管理;用户程序访问设备必须经过内核;一些Unix系统功能由多个程序协作实现;编写系统程序必须对系统调用和相关的数据结构有深入的理解。

 

----------------------------------------------------------------------------------------

本文链接http://blog.csdn.net/yongchurui/article/details/22333785

2014.03.27

你可能感兴趣的:(嵌入式应用编程)