• 内容详情
  • 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
    连接与游戏

    1. 全库网所有资源均来源于用户上传和网络,如有侵权请发送邮箱联系站长处理!
    2. 如果你有好的资源或者原创教程,可以到审核区投稿发布,分享会有钻石奖励和额外收入!
    3. 全库网所有的源码、教程等其它资源均源于用户上传发布,如有疑问,可直接联系发布作者处理
    4. 如有链接无法下载、失效或广告,请联系全库网管理员核实处理!
    5. 通过发布原创教学视频或优质源码资源可以免费获得全库网站内SVIP会员噢
    6.全库网管理猿邮箱地址:admin@qkuser.com,我们会在收到您的邮件后三个工作日内完成处理!
    7. 如遇到加密压缩包,默认解压密码为"qkuser.com",如遇到无法解压的请联系管理员!

    全库网 » Unix/linux编程实践学习教程 PDF电子书