Unix/linux编程实践教程 PDF电子书

2862
回复
69629
查看
  [复制链接]
字体大小: 正常 放大

3万

主题

3万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
39029

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2022-11-30 07:34:28 | 显示全部楼层 |阅读模式
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
smsh2.c:修改后的代码
shell变量:局部和全局
使用shell变量
变量的存储
增加变量命令:built-ins
效果如何
环境:个性化设置
使用环境
什么是环境以及它是如何工作的
在smsh中增加环境处理
varlib.c的代码
已实现的shell的功能

第10章:i/o重定向和管道

shell编程
一个shell应用程序:监视系统用户
标准i/o与重定向的若干概念
概念1:3个标准文件描述符
默认的连接:tty
程序都输出到stdout
重定向i/o的是shell而不是程序
理解i/o重定向
概念2:“最低可用文件描述符(lowest-available-fd)”原则
两个概念的结合
如何将stdin定向到文件
方法1:closethenopen
方法2:open..close..dup..close
系统调用dup小结
方法3:open..dup2..close
shell为其他程序重定向stdin
为其他程序重定向i/o:who]userlist
管道编程
创建管道
使用fork来共享管道
使用pipe、fork以及exec
技术细节:管道并非文件

第11章:连接到近端或远端的进程:服务器与socket(套接宇)

产品和服务
一个简单的比喻:饮料机接口
bc:unix中使用的计算器
编写bc:pipe、fork、dup、exec
对协同进程的讨论
fdopen:让文件描述符像文件--样使用
popen-让进程看似文件
popen的功能
实现popen:使用fdopen命令
访问数据:文件、应用程序接el(apl)和服务器
socket:与远端进程相连
类比:“电话中传来声音:现在时间是…”
因特网时间、dap和天气服务器
服务列表:众所周知的端口
编写timeserv        .        cc时间服务器
测试timeserv.c
编写timecint.c:时间服务客户端
测试timecint.c
另一种服务器:远程的ls
软件精灵

第12章:连接和协议:编写web服务器

服务器设计重点
三个主要操作
操作1和操作2:建立连接
操作1:建立服务器端socket
操作2:建立到服务器的连接
socklib.c
操作3:客户/服器的会话
使用socklib.c的timeserv/timecint
第2版的服务器:使用fork
服务器的设计问题:diy或代理
编写web服务器
web服务器功能
设计web服务器
web服务器协议
编写web服务器
运行web服务器
webserv的源程序
比较web服务器

第13章:基于数据报(datagram)的编程:编写许可证服务器

软件控制
许可证控制简史
一个非计算机系统实例:轿车管理系统
轿车钥匙管理描述
用客户/服务器方式管理轿车
许可证管理
许可证服务系统:它做些什么
许可证服务系统:如何工作
一个通信系统的例子
数据报socket
流与数据报的比较
数据报编程
sendto和recvfrom的小结
数据报应答
数据报小结
许可证服务器版本1.0
客户端版本1
服务器端版本1
测试版本1
进一步的工作
处理现实的问题
处理客户端崩溃
处理服务器崩溃
测试版本2
分布式许可证服务器
unix域socket
文件名作为socket地址
使用unix域socket编程
小结;socket和服务器

第14章:线程机制:并发函数的使用

同一时刻完成多项任务
函数的执行路线
一个单线程程序
一个多线程程序
相关函数小结
线程间的分工合作
例1:incrprint.c
例2:twordcount.c
线程内部的分工合作:小结
线程与进程
线程间互通消息
通知选举中心
使用条件变量编写程序
使用条件变量的函数
回到web服务器的例子
多线程的web服务器
web服务器程序的改进
多线程版本允许一个新的功能
防止僵尸线程(zombiethreads):独立线程
web服务器代码
线程和动画
使用线程的优点
多线程版本的bouneeld.c
基于多线程机制的多重动画:tanimate.c
tanimate.c中的互斥量
屏幕控制线程  

第15章:进程间通信(1pc)

编程方式的选择
talk命令:从多个数据源读取数据
同时从两个文件描述符读取数据
select系统调用
select与talk
select与poll
通信的选择
一个问题的三种解决方案
通过文件的进程间通信
命名管道
共享内存
各种进程间通信方法的比较
进程之间的分工合作
文件锁
信号量(semaphores)
socket及fifo与共享的存储
打印池
多个写者、一个读者
客户/服务器模型
纵观ipc
连接与游戏







本资源来源于 网络 付费网站  付费收集而来, 随时收集更新资源  本站专注搜集和分享各种付费网站资源,感谢您的信任


资源下载地址:
游客,如果您要查看本帖隐藏内容请回复>>>开通VIP无需回帖直接下载VIP通道

本站所有资源都来源于网络收集,网友提供或者交换而来!

如果侵犯了您的权益,请及时联系客服,我们即刻删除!




上一篇:淘宝网高并发架构与自动化运维实战
下一篇:老男孩Linux自动化运维第28期
回复

使用道具 举报

客服客服

客服客服

客服客服

客服QQ
微信扫一扫
自助开通会员后联系客服