第五讲 文件系统, I/O, 进程及进程间通讯
整体思路
本次讲座内容以 APUE 相关内容为蓝本, 重点突出 UNIX 相关特色或者在其他操作系统中编程时很少涉及的内容, 同时重点讲解 Linux 相关主题. 从而能够让听众就 UNIX/Linux 上的文件系统, I/O 及进程和进程间通讯有一个较为深入的了解.
讲座以概念解释为主, 重点讲述陌生的系统调用或函数.
主要内容
各部分要点
5.1 文件系统构造
- 基本概念
- 索引节点
- 目录和目录项
- 文件的定位
- 链接
- 文件系统相关系统调用所面临的问题
5.2 文件 I/O
- 基本概念
- 相关系统调用
- Open 以及文件的打开标志
- 原子操作
- 文件共享
- dup 和 dup2
- fcntl 和 ioctl
- 容易混淆的概念
5.3 标准 I/O 库
- 基本概念
- 缓冲机制
- 熟悉的标准 I/O 函数
- 陌生的标准 I/O 函数
5.4 文件和目录
- 目录项属性
- 目录读取
- 文件的访问许可
- 目录及目录项操作
- 其他
5.5 高级 I/O
- Linux 中直接的 I/O 端口读写
- 记录锁定
- I/O 多工
- 异步 I/O
- 内存映射
5.6 其他文件系统和 I/O 相关主题
5.7 进程及进程环境
- 基本概念
- main 函数
- 命令行参数及 popt 库
- 环境变量
- C 程序的内存布局
- 共享库
- 内存分配
- 程序的长跳转
- 进程的资源限制
5.8 进程控制
- 基本概念
- fork 和 vfork
- exit
- wait 函数
- 竞态
- exec 函数以及脚本解释器
- system 函数
- 进程记帐
- 用户和组标识符
- 进程时间
5.9 线程
- 基本概念
- 线程的创建和销毁
- 线程同步机制
- 实例分析: MiniGUI 中的消息传递
- 其他
5.10 进程关系
- 基本概念
- 终端和网络登录过程
- 进程组
- 会话
- 控制终端
- Shell 中的命令执行
- 作业控制
5.11 守护进程
5.12 进程间通讯
- 基本概念
- 管道
- FIFO
- System V 的 IPC 机制
- 共享内存
- 信号量
思考题及作业
- dup 可复制文件描述符, 我们能不能通过两次打开同一个文件而复制文件描述符? 试描述这两种操作的区别.
- 用追加模式打开文件之后, 能否使用 lseek 读取其他位置的数据, 能否用 lseek 替换其他数据? 试编写程序验证之.
- 为 MiniGUI 编写一个 "打开文件" 对话框, 界面和编程接口可参考 Win32 的 "打开文件" 对话框.
- 编写一个守护进程, 该进程每一分钟向系统日志中添加一条记录, 包括进程的时间信息和资源限制信息.
- 编写一个简单的 Shell 程序, 该程序有如下基本的 Shell 功能: 命令行参数传递, 输入输出重定向, 管道
- 编写一个自己的 system 函数
参考书目
- W. Richard Stevens, Advanced Programming in the UNIX Environment
- John Goerzen, The Linux Programming Bible
- Phil Cornes, The Linux A - Z
- Naba Barkakati, The Linux Secrets
- 魏永明等, 《Linux 实用教程》
- 魏永明等, 《学用 Linux 与 Windows NT》
进一步读物
- W. Richard Stevens, Advanced Programming in the UNIX Environment, From Chpater 3 to Chapter 15.
反馈
本讲由魏永明讲解。欢迎任何意见和建议,可发 email: ymwei@263.net 与魏永明联系。
AKA 自由软件系列讲座