部分 III. Linux系统编程

目录

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