zoukankan      html  css  js  c++  java
  • UNIX--Linux程序设计教程

    UNIX--Linux程序设计教程

    1 UNIX导论

    1.1 UNIX简史

    1.1.1 UNIX的诞生
    1.1.2 UNIX的早期发展
    1.1.3 BSD UNIX
    1.1.4 系统V UNIX
    1.1.5 UNIX的商业化
    1.1.6 Linux

    1.2 标准

    1.2.1 SVID
    1.2.2 POSIX
    1.2.3 统一UNIX规范
    1.2.4 C标准

    1.3 UNIX基本概念

    1.3.1 程序和进程
    1.3.2 内核
    1.3.3 shell
    1.3.4 用户名与用户ID、用户组与组ID
    1.3.5 特权用户
    1.3.6 系统调用与库函数

    1.4 系统库

    1.4.1 头文件
    1.4.2 保留字
    1.4.3 特征测试宏

    1.5 示例程序和编译环境

    1.6 错误处理

    1.7 系统信息

    1.7.1 机器标识
    1.7.2 硬件/软件类型识别

    1.8 系统能力限制

    1.8.1 一般能力限制值
    1.8.2 系统和文件特征选项
    1.8.3 sysconf()、pathconf()和fpathconf()函数

    1.9 思考与练习

    2 标准输入输出

    2.1 UNIX输入输出基本概念

    2.2 流和FILE对象

    2.3 打开和关闭流

    2.4 读和写流

    2.4.1 字符I/O
    2.4.2 行I/O
    2.4.3 读回退
    2.4.4 块I/O

    2.5 文件定位

    2.6 文件结束和错误指示器

    2.7 流缓冲

    2.8 格式I/O

    2.8.1 格式输出
    2.8.2 格式输入

    2.9 临时文件

    2.10 思考与练习

    3 低级输入输出

    3.1 文件描述字的打开、创建和关闭

    3.2 read()和write()函数

    3.3 设置描述字的文件位置

    3.4 dup()和dup2()函数

    3.5 fdopen()和fileno()函数

    3.6 文件控制函数fcntl()

    3.6.1 重复文件描述字
    3.6.2 文件描述字标签
    3.6.3 文件状态标签

    3.7 非阻塞I/O

    3.8 readv()和writev()函数

    3.9 fsync()和fdatasync()函数

    3.10 思考与练习

    4 文件与目录

    4.1 文件

    4.1.1 stat()、fstat()和lstat()函数

    4.2 文件类型

    4.2.1 普通文件
    4.2.2 目录
    4.2.3 链接与link()函数
    4.2.4 符号链接与symlink()和readlink()函数
    4.2.5 特别文件
    4.2.6 测试文件的类型

    4.3 文件的属主和用户组

    4.3.1 chown()、fchown()和lchown()函数

    4.4 文件方式

    4.4.1 文件访问权限
    4.4.2 调整用户ID和调整组ID
    4.4.3 sticky位
    4.4.4 文件方式位小结

    4.5 确定和改变文件方式

    4.5.1 umask()函数
    4.5.2 chmod()和fchmod()函数
    4.5.3 access()函数

    4.6 文件大小

    4.6.1 截断文件

    4.7 文件时间

    4.7.1 utime()和utimes()函数

    4.8 文件的删除与换名

    4.8.1 删除文件和目录
    4.8.2 文件换名

    4.9 目录操作

    4.9.1 工作目录
    4.9.2 创建目录
    4.9.3 读目录流
    4.9.4 对目录流的随机访问

    4.10 思考与练习

    5 进程环境

    5.1 main()函数

    5.2 命令行参数

    5.2.1 命令行参数的语法约定
    5.2.2 扫描命令行中的选项

    5.3 环境变量

    5.3.1 环境表
    5.3.2 访问环境

    5.4 终止进程

    5.4.1 出口状态
    5.4.2 终止前的清理
    5.4.3 流产程序

    5.5 进程的存储空间

    5.5.1 进程的地址空间
    5.5.2 动态存储分配与释放
    5.5.3 释放分配的存储单元

    5.6 setjmp()和longjmp()函数

    5.7 进程资源

    5.7.1 查看与设置资源限制
    5.7.2 资源使用统计

    5.8 用户信息

    5.8.1 用户名
    5.8.2 用户数据库
    5.8.3 组数据库

    5.9 进程的身份凭证

    5.10 调整进程的身份

    5.11 思考与练习

    6 进程控制

    6.1 进程标识

    6.2 进程创建

    6.3 执行一个新程序

    6.4 等待进程完成

    6.5 进程终止与僵死进程

    6.6 system()函数

    6.7 进程组

    6.8 会晤期

    6.9 控制终端

    6.10 作业控制

    6.11 思考与练习

    7 信号处理

    7.1 信号概念

    7.2 UNIX信号

    7.2.1 程序错误类信号
    7.2.2 程序中止类信号
    7.2.3 闹钟类信号
    7.2.4 I/O类信号
    7.2.5 作业控制类信号
    7.2.6 操作错误类信号
    7.2.7 其他信号

    7.3 生成信号

    7.3.1 raise()函数
    7.3.2 kill()函数

    7.4 设置信号的动作

    7.4.1 signal()函数
    7.4.2 进程初启时的信号动作
    7.4.3 不可靠信号
    7.4.4 sigaction()函数

    7.5 信号句柄

    7.5.1 正常返回的信号句柄
    7.5.2 终止进程的句柄

    7.6 阻塞信号

    7.6.1 sigset_t类型和信号集操作
    7.6.2 设置信号屏蔽
    7.6.3 检查悬挂信号

    7.7 等待信号

    7.7.1 pause()函数
    7.7.2 sigsuspend()函数

    7.8 使用分开的信号栈

    7.9 信号句柄编程技巧

    7.9.1 句柄内非局部控制转移
    7.9.2 可重入函数与异步信号安全函数
    7.9.3 被信号中断的系统调用
    7.9.4 原子数据

    7.10 实时信号

    7.10.1 SA_SIGINFO标志
    7.10.2 发送实时信号
    7.10.3 等待实时信号

    7.11 思考与练习

    8 时间与定时

    8.1 系统时钟

    8.1.1 time()函数
    8.1.2 gettimeofday()函数

    8.2 时间格式转换

    8.2.1 分解的日历时间
    8.2.2 格式化日期与时间

    8.3 CPU时间与墙钟时间

    8.3.1 clock()函数
    8.3.2 times()函数

    8.4 睡眠与定时

    8.4.1 sleep()函数
    8.4.2 设置定时器

    8.5 实时时钟与定时

    8.5.1 实时时钟
    8.5.2 实时睡眠
    8.5.3 实时定时器
    8.5.4 创建和删除实时定时器
    8.5.5 设置实时定时器
    8.5.6 定时器超期计数

    8.6 思考与练习

    9 终端I/O

    9.1 需要改变终端设置的例子

    9.2 终端I/O概述

    9.2.1 终端
    9.2.2 串行端口
    9.2.3 终端设备文件
    9.2.4 输入输出队列
    9.2.5 加工和非加工输入方式

    9.3 GTI控制接口

    9.3.1 termios数据结构
    9.3.2 GTI控制函数

    9.4 终端属性

    9.4.1 输入方式
    9.4.2 输出方式
    9.4.3 控制方式
    9.4.4 局部方式
    9.4.5 特殊字符
    9.4.6 stty命令

    9.5 终端标识

    9.6 改变终端属性

    9.7 加工方式与非加工方式输入

    9.7.1 加工方式输入
    9.7.2 非加工方式输入

    9.8 设置波特率

    9.9 行控制函数

    9.10 串行端口程序设计

    9.11 思考与练习

    10 高级I/O

    10.1 文件锁

    10.1.1 fcntl()文件锁操作
    10.1.2 锁的测试、请求和释放
    10.1.3 文件锁与进程和文件的关系
    10.1.4 死锁
    10.1.5 建议锁与强制锁

    10.2 信号驱动的I/O

    10.3 多路转接I/O

    10.3.1 select()函数
    10.3.2 poll()函数

    10.4 异步I/O

    10.4.1 异步I/O控制块
    10.4.2 I/O完成时的信号交付
    10.4.3 异步I/O的优先级
    10.4.4 异步I/O函数
    10.4.5 异步I/O之例
    10.4.6 异步I/O注意事项

    10.5 存储映射I/O

    10.6 思考与练习

    11 进程间通信

    11.1 管道

    11.1.1 创建管道
    11.1.2 父子进程间的管道通信
    11.1.3 连接标准输入和标准输出的管道
    11.1.4 popen()和pclose()函数
    11.1.5 管道I/O的原子性

    11.2 FIFO特别文件

    11.2.1 创建FIFO
    11.2.2 FIFO操作
    11.2.3 FIFO用于客户/服务通信

    11.3 系统V IPC

    11.3.1 关键字和标识
    11.3.2 IPC资源描述结构与成员ipc_perm
    11.3.3 ipcs和ipcrm命令

    11.4 消息队列

    11.4.1 创建和获得消息队列
    11.4.2 消息队列的查询、设置和删除
    11.4.3 发送和接收消息

    11.5 共享存储段

    11.5.1 创建和获得共享存储段
    11.5.2 共享存储段的查询、设置和删除
    11.5.3 共享存储段的连接和分离

    11.6 信号量

    11.6.1 创建和获得信号量标识
    11.6.2 信号量的查询、设置和删除
    11.6.3 信号量操作

    11.7 思考与练习

    12 套接字与网络通信

    12.1 TCP/IP协议

    12.2 套接字

    12.3 套接字地址结构

    12.3.1 IP地址
    12.3.2 域名地址
    12.3.3 服务与端口号
    12.3.4 套接字地址数据结构
    12.3.5 字节顺序

    12.4 命名套接字

    12.5 套接字通信模式

    12.6 流套接字操作

    12.6.1 请求连接
    12.6.2 接收连接
    12.6.3 getsockname()和getpeername()函数
    12.6.4 多客户服务
    12.6.5 send()和recv()函数

    12.7 套接字选项

    12.8 带外数据

    12.8.1 TCP带外数据
    12.8.2 带外数据的发送和接收
    12.8.3 带外数据标志

    12.9 数据报套接字操作

    12.9.1 sendto()和recvfrom()函数
    12.9.2 数据报套接字客户/服务之例
    12.9.3 使用connect()函数

    12.10 超时处理

    12.11 思考与练习

    13 线程

    13.1 线程概念

    13.1.1 什么是线程
    13.1.2 线程的好处
    13.1.3 Pthreads线程
    13.1.4 线程标识

    13.2 创建线程

    13.3 终止线程

    13.3.1 等待线程终止
    13.3.2 可汇合与分离的线程

    13.4 创建特殊属性的线程

    13.5 互斥变量

    13.5.1 互斥变量的初始化和销毁
    13.5.2 互斥变量属性
    13.5.3 互斥变量的加锁与解锁
    13.5.4 互斥变量与spin锁

    13.6 读写锁

    13.6.1 读写锁的初始化和销毁
    13.6.2 读写锁的上锁与解锁

    13.7 条件变量

    13.7.1 创建和销毁条件变量
    13.7.2 条件变量属性
    13.7.3 等待条件变量
    13.7.4 唤醒条件变量等待

    13.8 思考与练习

    14 线程高级特征

    14.1 线程专有数据

    14.1.1 线程专有数据键的创建和删除
    14.1.2 使用线程专有数据

    14.2 取消线程

    14.2.1 线程的可取消属性
    14.2.2 取消线程与取消点
    14.2.3 异步取消的安全性
    14.2.4 现场清理

    14.3 线程调度

    14.3.1 线程调度竞争范围
    14.3.2 调度策略与优先级
    14.3.3 线程调度属性
    14.3.4 动态改变线程的调度策略和优先级

    14.4 线程与信号

    14.4.1 信号动作
    14.4.2 信号屏蔽
    14.4.3 向线程发送信号
    14.4.4 等待信号
    14.4.5 一种新的事件通知方法:SIGEV_THREAD

    14.5 思考与练习

    思维导图

    UNIX--Linux程序设计教程

    防止博客图床图片失效,防止图片源站外链:

    http://www.processon.com/chart_image/5e5b3eb9e4b0541c5e14a37e.png)

    思维导图在线编辑链接:

    https://www.processon.com/view/5e5b3eb9e4b0541c5e14a37b

  • 相关阅读:
    JS魔法堂:jQuery.Deferred(jQuery1.5-2.1)源码剖析
    JS魔法堂:ASI(自动分号插入机制)和前置分号
    JS魔法堂:初探传说中的setImmediate函数
    JS魔法堂:LINK元素深入详解
    JS魔法堂:IMG元素加载行为详解
    JS魔法堂:函数节流(throttle)与函数去抖(debounce)
    JS魔法堂:从void 0 === undefined说起
    JS魔法堂:jsDeferred源码剖析
    前端翻译:Promises/A+规范
    JS魔法堂:剖析源码理解Promises/A规范
  • 原文地址:https://www.cnblogs.com/jingle1267/p/13162262.html
Copyright © 2011-2022 走看看