第1章 基础知识
1.1 什么是系统编程
1.1.1 系统调用
1.1.2 内核与内核服务
1.1.3 内存管理机制
1.1.4 系统编程风格
1.2 动手实践
1.3 库的使用
1.3.1 静态编程库的生成与调用
1.3.2 动态链接库的生成与调用
1.4 学习步骤
1.4.1 系统编程的评价标准
1.4.2 系统编程的学习步骤
1.5 本章小结
思考题
第2章 文件操作
2.1 引例
2.2 文件的操作
2.2.1 文件的表示
2.2.2 文件的打开、创建、删除与关闭
2.2.3 文件的读和写
2.2.4 文件的定位、缓冲与复制
2.2.5 文件控制和文件锁
2.3 unix文件系统概述
2.3.1 unix文件系统的结构
2.3.2 unix文件系统的内部实现
2.4 文件属性与文件系统属性
2.4.1 文件属性函数族
2.4.2 文件类型
2.4.3 文件访问权限
2.4.4 文件访问方式
2.4.5 文件其他属性
2.4.6 文件系统属性
2.5 目录文件的操作
2.5.1 读取与更改工作目录
2.5.2 目录的创建与删除
2.5.3 目录的读取与定位
2.6 设备文件
2.6.1 设备如何成为文件
2.6.2 设备文件操作
2.6.3 终端设备
2.6.4 串行端口编程
2.7 本章小结
思考题
第3章 并发控制——进程篇
3.1 引例
3.2 进程与进程控制
3.2.1 进程的结构和描述
3.2.2 进程控制
3.3 进程的同步与互斥
3.3.1 父、子进程之间的同步
3.3.2 通过信号量实现进程间同步
3.3.3 通过文件锁实现进程间同步
3.4 僵死进程与守护进程
3.4.1 僵死进程
3.4.2 守护进程
3.5 进程间通信
3.5.1 通信机制的选择
3.5.2 通过文件实现进程间通信
3.5.3 通过内核实现进程间通信
3.5.4 通过内存实现进程间通信
3.6 本章小结
思考题
第4章 并发控制——线程篇
4.1 引例
4.2 线程与线程控制
4.2.1 什么是线程
4.2.2 线程控制
4.2.3 线程属性
4.3 线程的同步与互斥
4.3.1 互斥量
4.3.2 条件变量
4.3.3 线程同步中的信号量
4.4 本章小结
思考题
第5章 网络通信
5.1 引例
5.2 网络编程基础
5.2.1 如何标识网络中的进程
5.2.2 主机字节次序与网络字节次序
5.2.3 面向连接方式和无连接方式
5.2.4 实现网络编程
5.3 套接字
5.3.1 创建套接字
5.3.2 套接字寻址
5.3.3 套接字选项
5.4 面向连接的通信
5.4.1 tcp协议的编程模型
5.4.2 tcp通信应用
5.4.3 tcp数据包的收发分析
5.5 面向无连接的通信
5.5.1 udp协议的编程模型
5.5.2 udp 通信应用
5.5.3 udp数据包的收发分析
5.6 基于ip层和数据链路层的通信
5.6.1 基于ip层的通信
5.6.2 基于链路层的通信
5.7 并发socket编程
5.7.1 非阻塞并发模型
5.7.2 多进程并发模型
5.7.3 多线程并发模型
5.7.4 io多路复用并发模型
5.8 本章小结
思考题
第6章 异步事件
6.1 引例
6.2 信号
6.2.1 信号的产生与分类
6.2.2 信号的发送
6.2.3 信号的安装
6.2.4 信号编程注意事项
6.3 时间与定时器
6.3.1 时间的数据结构与应用
6.3.2 普通定时器与精通定时器
6.3.3 定时器的漂移和超限
6.4 异步i/o编程
6.4.1 相关核心数据结构
6.4.2 相关操作
6.4.3 aio通知
6.5 本章小结
思考题
第7章 并行计算初识
7.1 引例
7.1.1 串行计算模式简介
7.1.2 并行计算模式简介
7.1.3 多进程并行计算案例
7.1.4 多线程并行计算案例
7.2 多机集群环境下的mpi编程
7.2.1 什么是mpi
7.2.2 mpi的编程框架
7.2.3 mpi通信
7.3 多核集群环境下的openmp编程
7.3.1 什么是openmp
7.3.2 如何实现openmp编程
7.3.3 openmp的不足
7.3.4 openmp+mpi混合编程模式
7.4 由并行计算到云计算
7.5 本章小结
思考题
附录 unix的发展历程
参考文献