部分 III. Linux 系统编程
目录
- 文件与 I/O
- 汇编程序的 Hello world
- C 标准 I/O 库函数与 Unbuffered I/O 函数
- open/close
- read/write
- lseek
- fcntl
- ioctl
- mmap
- 文件系统
- 引言
- ext2 文件系统
- 总体存储布局
- 实例剖析
- 数据块寻址
- 文件和目录操作的系统函数
- VFS
- 内核数据结构
- dup 和 dup2 函数
- 进程
- 引言
- 环境变量
- 进程控制
- fork 函数
- exec 函数
- wait 和 waitpid 函数
- 进程间通信
- 管道
- 其它 IPC 机制
- 练习:实现简单的 Shell
- Shell 脚本
- Shell 的历史
- Shell 如何执行命令
- 执行交互式命令
- 执行脚本
- Shell的基本语法
- 变量
- 文件名代换(Globbing): * ? []
- 命令代换: ` 或 $()
- 算术代换: $(())
- 转义字符
- 单引号
- 双引号
- bash 启动脚本
- 作为交互登录 Shell 启动,或者使用 --login 参数启动
- 以交互非登录 Shell 启动
- 非交互启动
- 以 sh 命令启动
- Shell 脚本语法
- 条件测试: test [
- if/then/elif/else/fi
- case/esac
- for/do/done
- while/do/done
- 位置参数和特殊变量
- 函数
- Shell 脚本的调试方法
- 正则表达式
- 引言
- 基本语法
- sed
- awk
- 练习:在 C 语言中使用正则表达式
- 信号
- 信号的基本概念
- 产生信号
- 通过终端按键产生信号
- 调用系统函数向进程发信号
- 由软件条件产生信号
- 阻塞信号
- 信号在内核中的表示
- 信号集操作函数
- sigprocmask
- sigpending
- 捕捉信号
- 内核如何实现信号的捕捉
- sigaction
- pause
- 可重入函数
- sig_atomic_t 类型与 volatile 限定符
- 竞态条件与 sigsuspend 函数
- 关于 SIGCHLD 信号
- 终端、作业控制与守护进程
- 终端
- 终端的基本概念
- 终端登录过程
- 网络登录过程
- 作业控制
- Session 与进程组
- 与作业控制有关的信号
- 守护进程
- 终端
- 线程
- 线程的概念
- 线程控制
- 创建线程
- 终止线程
- 线程间同步
- mutex
- Condition Variable
- Semaphore
- 其它线程间同步机制
- 编程练习
- TCP/IP 协议基础
- TCP/IP 协议栈与数据包封装
- 以太网 (RFC 894) 帧格式
- ARP 数据报格式
- IP 数据报格式
- IP 地址与路由
- UDP 段格式
- TCP 协议
- 段格式
- 通讯时序
- 流量控制
- socket 编程
- 预备知识
- 网络字节序
- socket 地址的数据类型及相关函数
- 基于 TCP 协议的网络程序
- 最简单的 TCP 网络程序
- 错误处理与读写控制
- 把 client 改为交互式输入
- 使用 fork 并发处理多个 client 的请求
- setsockopt
- 使用 select
- 基于 UDP 协议的网络程序
- UNIX Domain Socket IPC
- 练习:实现简单的 Web 服务器
- 基本 HTTP 协议
- 执行 CGI 程序
- 预备知识