TA的每日心情 | 开心 2024-9-19 21:14 |
---|
签到天数: 757 天 [LV.10]以坛为家III
管理员
- 积分
- 1312455
|
资源详情
Unix环境高级编程虽然是一本很经典的案头必备的书籍,但它更像是一本字典,对于初学者来说看起来很艰难,《Unix/Linux编程实践教程》中有趣的实例与循序渐进的讲解,我认为更适合初学者的学习
【课程目录】
第1章:unix系统编程概述
介绍
什么是系统编程
简单的程序模型
系统模型
操作系统的职责
为程序提供服务
理解系统编程
系统资源
目标:理解系统编程
方法:通过三个问题来理解
从用户的角度来理解unix
unix能做些什么
登录--运行程序--注销
目录操作
文件操作
从系统的角度来看unix
用户和程序之间的连接方式
网络桥牌
bc:unix的计算器
从bc/dc到web
动手实践
工作步骤与概要图
接下来的工作步骤
unix的概要图
unix的发展历程
第2章:用户、文件操作与联机帮助:编写who命令
介绍
关于命令who
问题1:who命令能做些什么
问题2:who命令是如何工作的
问题3:如何编写who
问题:如何从文件中读取数据结构
答案:使用open、read和close
编写wh01.c
显示登录信息
编写wh02.c
回顾与展望
编写cp(读和写)
问题1:cp命令能做些什么
问题2:cp命令是如何创建/重写文件的
问题3:如何编写cp
unix编程看起来好像很简单
提高文件i/o效率的方法:使用缓冲
缓冲区的大小对忄生能的影响
为什么系统调用需要很多时间
低效率的wh02.c
在wh02.c中运用缓冲技术
内核缓冲技术
文件读写
注销过程:做了些什么
注销过程:如何工作的
改变文件的当前位置
编写终端注销的代码
处理系统调用中的错误
第3章:目录与文件属忄生:编写ls
介绍
问题1:1s命令能做什么
1s可以列出文件名和文件的属忄生
列出指定目录或文件的信息
经常用到的命令行选项
问题1的答案
文件树
问题2:1s是如何工作的
什么是目录
是否可以用open、read和close来操作目录
如何读目录的内容
问题3:如何编写ls
编写ls-1
问题1:ls-1能做些什么
问题2:ls-1是如何工作的
用stat得到文件信息
stat提供的其他信息
如何实现
将模式字段转换成字符
将用户/组id转换成字符串
编写ls2.c
三个特殊的位
set-user-id位
set-group-id位
sticky位
用ls-1看到的特殊属忄生
ls小结
设置和修改文件的属忄生
文件类型
许可位与特殊属忄生位
文件的链接数
文件所有者与组
文件大小
时间
文件名
第4章:文件系统:编写pwd
介绍
从用户的角度看文件系统
目录和文件
目录命令
文件操作命令
针对目录树的命令
目录树的深度几乎没有限制
unix文件系统小结
unix文件系统的内部结构
第一层抽象:从磁盘到分区
第二层抽象:从磁盘到块序列
第三层抽象:从块序列到三个区域的划分
文件系统的实现:创建一个文件的过程
文件系统的实现:目录的工作过程
文件系统的实现:cat命令的工作原理
i-节点和大文件
unix文件系统的改进
理解目录
理解目录结构
与目录树相关的命令和系统调用
编写pwd
pwd的工作过程
pwd的一种版本
多个文件系统的组合:由多棵树构成的树
装载点
多重i-节点号和设备交叉链接
符号链接
第5章:连接控制:学习stty
为设备编程
设备就像文件
设备具有文件名
设备和系统调用
例子:终端就像文件
设备文件的属忄生
编写write程序
设备文件和i-节点
设备与文件的不同之处
磁盘连接的属忄生
属忄生1:缓冲
属忄生2:自动添加模式
用open控制文件描述符
磁盘连接小结
终端连接的属忄生
终端的i/o并不如此简单
终端驱动程序
stty命令
编写终端驱动程序:关于设置
编写终端驱动程序:关tx数
编写终端驱动程序:关于位
编写终端驱动程序:几个程序例子
终端连接小结
其他设备编程:ioctl
文件、设备和流
第6章:为用户编程:终端控制和信号
软件工具与针对特定设备编写的程序
终端驱动程序的模式
规范模式:缓冲和编辑
非规范处理
终端模式小结
编写一个用户程序:play_again.c
信号
ctrl-c做什么
信号是什么
进程该如何处理信号
信号处理的例子
为处理信号做准备:play_again4.c
进程终止
为设备编程
第7章:事件驱动编程:编写一个视频游戏
视频游戏和操作系统
任务:单人弹球游戏(pong)
屏幕编程:curses库
介绍curses
curses内部:虚拟和实际屏幕
时间编程:sleep
时钟编程1:alarms
添加时延:sleep
sleep()是如何工作的:使用unix中的alarms
调度将要发生的动作
时间编程2:间隔计时器
添加精度更高的时延:usleep
三种计时器:真实、进程和实用
两种间隔:初始和重复
用间隔计时器编程
计算机有几个时钟
计时器小结
信号处理1:使用signal
早期的信号处理机制
处理多个信号
测试多个信号
信号机制其他的弱点
信号处理2:sigaction
处理多个信号:sigaction
信号小结
防止数据损毁(datacorruption)
数据损毁的例子
临界(criticalsections)
阻塞信号:sigprocmask和sigsetops
重入代码(reentrantcode):递归调用的危险
视频游戏中的临界区
kill:从另--个进程发送的信号
使用计时器和信号:视频游戏
bounceld.c:在一条线上控制动画
bounce2d.c:两维动画
完成游戏
输入信号,异步i/o
使用异步i/o
方法1:使用oasync
方法2:使用aio..read
弹球程序中需要异步读人吗
异步输入、视频游戏和操作系统
第8章:进程和程序:编写命令解释器sh
进程=运行中的程序
通过命令ps学习进程
系统进程
进程管理和文件管理
内存和程序
shell:进程控制和程序控制的--个工具
shell是如何运行程序的
shell的主循环
问题1:一个程序如何运行另一个程序
问题2:女口何建立新的进程
问题3:父进程如何等待子进程的退出
小结:shell如何运行程序
实现一个shell:psh2.c
思考:用进程编程
exit和exec的其他细节
进程死亡:exit和_exit
exec家族
第9章:可编程的shell、shell变量和环境:编写自己的shell
shell编程
什么是以及为什么要使用shell脚本语言
smshl--命令行解析
shell中的流程控制
if语句做些什么
if是女口何工作的
在stash中增加if
|
|