logo资料库

linux系统编程(中文版).pdf

第1页 / 共396页
第2页 / 共396页
第3页 / 共396页
第4页 / 共396页
第5页 / 共396页
第6页 / 共396页
第7页 / 共396页
第8页 / 共396页
资料共396页,剩余部分请下载后查看
译者序
版权声明
目 录
第 1 章 简介和主要概念
1.1 系统编程
1.1.1 系统调用
1.1.2 调用系统调用
1.1.3 C库
1.1.4 C编译器
1.2 API和ABI
1.2.1 API
1.2.2 ABI
1.3 标准
1.3.1 POSIX和SUS的历史
1.3.2 C语言标准
1.3.3 Linux和标准
1.3.4 本书和标准
1.4 Linux编程概念
1.4.1 文件和文件系统
1.4.2 普通文件
1.4.3 目录和链接
1.4.4 硬链接
1.4.5 符号链接
1.4.6 特殊文件
1.4.7 文件系统和名字空间
1.4.8 进程
1.4.9 线程
1.4.10 进程体系
1.4.11 用户和组
1.4.12 权限
1.4.13 信号
1.4.14 进程间通讯
1.4.15 头文件
1.4.16 错误处理
1.5 开始系统编程
第 2 章 文件I/O
2.1 打开文件
2.1.1 open()系统调用
2.1.2 新文件所有者
2.1.3 新文件权限
2.1.4 creat()函数
2.1.5 返回值和错误码
2.2 用read()读取文件
2.2.1 返回值
2.2.2 读入所有的字节
2.2.3 非阻塞读
2.2.4 其他错误码
2.2.5 read()大小限制
2.3 用write()来写
2.3.1 部分写
2.3.2 追加模式
2.3.3 非阻塞写
2.3.4 其他错误码
2.3.5 write()大小限制
2.3.6 write()的行为
2.4 同步I/O
2.4.1 fsync()和fdatasync()
2.4.2 返回值和错误码
2.4.3 sync()
2.4.4 O_SYNC标志
2.4.5 O_DSYNC和O_RSYNC
2.5 直接I/O
2.6 关闭文件
2.6.1 错误码
2.7 用lseek()查找
2.7.1 文件末尾之后进行查找
2.7.2 错误码
2.7.3 限制
2.8 定位读写
2.8.1 错误码
2.9 截短文件
2.10 I/O多路复用
2.10.1 select()
2.10.2 返回值和错误码
2.10.3 poll()
2.10.4 poll()与select()
2.11 内核内幕
2.11.1 虚拟文件系统
2.11.2 页缓存
2.11.3 页回写
2.12 结论
第 3 章 缓冲输入输出
3.1 用户-缓冲I/O
3.1.1 块大小
3.1.2 标准I/O
3.1.3 文件指针
3.2 打开文件
3.2.1 模式
3.2.2 通过文件描述符打开文件
3.3 关闭流
3.3.1 关闭所有的流
3.4 从流中读取数据
3.4.1 单字节读取
3.4.2 把字符回放入流中
3.4.3 按行的读取
3.4.4 读取任意字符串
3.4.5 读取二进制文件
3.5 向流中写数据
3.5.1 对齐的讨论
3.5.2 写入单个字符
3.5.3 写入字符串
3.5.4 写入二进制数据
3.5.5 缓冲I/O示例程序
3.6 定位流
3.6.1 获得当前流位置
3.7 清洗一个流
3.8 错误和文件结束
3.9 获得关联的文件描述符
3.10 控制缓冲
3.11 线程安全
3.11.1 手动文件加锁
3.11.2 不加锁流操作
3.12 对标准I/O的批评
3.13 结论
第 4 章 高级文件I/O
4.1 散布/聚集 I/O
4.1.1 readv()和writev()
4.2 Event Poll接口
4.2.1 创建一个新的epoll实例
4.2.2 控制epoll
4.2.3 等待Epoll事件
4.2.4 边沿触发事件和水平触发事件
4.3 存储映射
4.3.1 mmap()
4.3.2 munmap()
4.3.3 存储映射例子
4.3.4 mmap()的优点
4.3.5 mmap()的缺陷
4.3.6 调整映射的大小
4.3.7 改变映射区域的权限
4.3.8 使用映射机制同步文件
4.3.9 映射提示
4.4 普通文件I/O提示
4.4.1 posix_fadvise()
4.4.2 readahead()系统调用
4.4.3 “经济实用“的操作提示
4.5 同步(Synchronized),同步(Synchronous)及异步( Asynchronous)操作
4.5.1 异步I/O
4.6 I/O调度器和I/O性能
4.6.1 磁盘寻址
4.6.2 调度器的功能
4.6.3 改进读请求
4.6.4 选择和配置你的I/O调度器
4.6.5 优化I/O性能
4.7 结论
第 5 章 进程管理
5.1 进程ID
5.1.1 分配进程ID
5.1.2 进程体系
5.1.3 pid_t
5.1.4 获得进程ID和父进程的ID
5.2 运行新进程
5.2.1 exec系列系统调用
5.2.2 fork()系统调用
5.3 终止进程
5.3.1 其他终止进程的方式
5.3.2 atexit()
5.3.3 on_exit( )
5.3.4 SIGCHLD
5.4 等待终止的子进程
5.4.1 等待特定进程
5.4.2 其他等待子进程的方法
5.4.3 BSD中的wait3()和wait4()
5.4.4 创建并等待一个新进程
5.4.5 僵死进程
5.5 用户和组
5.5.1 实际用户(组)ID、有效用户(组)ID和保存设置的用户(组)ID
5.5.2 改变实际用户(组)ID和保存设置的用户(组)ID
5.5.3 改变有效用户和组ID
5.5.4 BSD改变用户ID和组ID的方式
5.5.5 HP-UX中改变用户ID和组ID的方式
5.5.6 操作用户ID组ID的首选方法
5.5.7 对保存设置的用户ID的支持
5.5.8 获取用户ID和组ID
5.6 会话和进程组
5.6.1 与会话相关的系统调用
5.6.2 与进程组相关的系统调用
5.6.3 废弃的进程组函数
5.7 守护进程
5.8 总结
第 6 章 高级进程管理
6.1 进程调度
6.1.1 大O记法
6.1.2 时间片
6.1.3 I/O约束进程 Vs. 处理器约束进程
6.1.4 抢占调度
6.1.5 线程
6.2 让出处理器
6.2.1 合理使用
6.2.2 让出处理器方法的过去和现状
6.3 进程优先级
6.3.1 nice()
6.3.2 getpriority()和setpriority()
6.3.3 I/O优先级
6.4 处理器亲和度
6.4.1 sched_getaffinity() 和 sched_setaffinity()
6.5 实时系统
6.5.1 软硬实时系统
6.5.2 延时,抖动和截止期限
6.5.3 Linux的实时支持
6.5.4 Linux调度策略和优先级
6.5.5 设置调度参数
6.5.6 sched_rr_get_interval()
6.5.7 关于实时进程的一些提醒
6.5.8 确定性
6.6 资源限制
6.6.1 限制列表
6.6.2 获取和设置资源限制
第 7 章 文件与目录管理
7.1 文件及其元数据
7.1.1 一组stat函数
7.1.2 权限
7.1.3 所有权
7.1.4 扩展属性
7.2 目录
7.2.1 当前工作目录
7.2.2 创建目录
7.2.3 移除目录
7.2.4 读取目录内容
7.3 链接
7.3.1 硬链接
7.3.2 符号链接
7.3.3 解除链接
7.4 复制和移动文件
7.4.1 复制
7.4.2 移动
7.5 设备节点
7.5.1 特殊设备节点
7.5.2 随机数生成器
7.6 带外通信
7.7 监视文件事件
7.7.1 初始化inotify
7.7.2 监视
7.7.3 inotify事件
7.7.4 高级监视选项
7.7.5 删除inotify监视
7.7.6 获取事件队列大小
7.7.7 销毁inotify实例
第 8 章 内存管理
8.1 进程地址空间
8.1.1 页和页面调度
8.1.2 存储器区域
8.2 动态内存分配
8.2.1 数组分配
8.2.2 调整已分配内存大小
8.2.3 动态内存的释放
8.2.4 对齐
8.3 数据段的管理
8.4 匿名存储器映射
8.4.1 创建匿名存储器映射
8.4.2 映射到/dev/zero
8.5 高级存储器分配
8.5.1 使用malloc_usable_size()和malloc_trim()进行调优
8.6 调试内存分配
8.6.1 获得统计数据
8.7 基于栈的分配
8.7.1 栈中的复制串
8.7.2 变长数组
8.8 选择一个合适的内存分配机制
8.9 存储器操作
8.9.1 字节设置
8.9.2 字节比较
8.9.3 字节移动
8.9.4 字节搜索
8.9.5 字节加密
8.10 内存锁定
8.10.1 锁定部分地址空间
8.10.2 锁定全部地址空间
8.10.3 内存解锁
8.10.4 锁定的限制
8.10.5 这个页面在物理内存中吗?
8.11 投机性存储分配策略
8.11.1 超量使用和内存耗尽
第 9 章 信号
9.1 信号概念
9.1.1 信号标识符
9.1.2 Linux支持的信号
9.2 基本信号管理
9.2.1 等待信号
9.2.2 例子
9.2.3 执行与继承
9.2.4 映射信号编号为字符串
9.3 发送信号
9.3.1 权限
9.3.2 例子
9.3.3 给自己发送信号
9.3.4 给整个进程组发送信号
9.4 重入
9.4.1 有保证的可重入函数
9.5 信号集
9.5.1 更多的信号集函数
9.6 阻塞信号
9.6.1 获取待处理信号
9.6.2 等待信号集
9.7 高级信号管理
9.7.1 siginfo_t结构
9.7.2 si_code的精彩世界
9.8 发送带附加信息的信号
9.8.1 例子
9.9 结论
第 10 章 时间
10.1 时间的数据结构
10.1.1 原始表示
10.1.2 毫秒级精度
10.1.3 纳秒级精度
10.1.4 “分解”时间
10.1.5 一种进程时间类型
10.2 POSIX时钟
10.3 时间源精度
10.4 取得当前时间
10.4.1 一个更好的接口
10.4.2 一个高级接口
10.4.3 取得进程时间
10.5 设置当前时间
10.5.1 高精度定时
10.5.2 设置时间的一个高级接口
10.6 玩转时间
10.7 调校系统时钟
10.8 睡眠和等待
10.8.1 微秒级精度睡眠
10.8.2 Linux的实时支持
10.8.3 纳秒级精度睡眠
10.8.4 实现睡眠的高级方法
10.8.5 sleep的一种可移植实现
10.8.6 超限
10.8.7 替代睡眠
10.9 定时器
10.9.1 简单的闹钟
10.9.2 间歇定时器
10.9.3 高级定时器
10.9.4 设置定时器
附录 A GCC对C语言的扩展
A.1 GNU C
A.2 内联函数
A.3 禁用内联
A.4 纯函数
A.5 常函数
A.6 不返回的函数
A.7 分配内存的函数
A.8 强制调用函数检查返回值
A.9 将函数标记为deprecated
A.10 将函数标记为used
A.11 将函数或参数标记为unused
A.12 将结构体进行打包(pack)
A.13 增加变量的内存对齐量
A.14 将全局变量置于寄存器中
A.15 分支预测
A.16 获取表达式的类型
A.17 获取类型的内存对齐量
A.18 结构体中成员的偏移量
A.19 获取函数返回地址
A.20 在Case中使用范围
A.21 void和函数指针的算术操作
A.22 让代码变得更美观并有更好的移植性
附录 B 参考书目
B.1 C语言程序设计的相关书籍
B.2 Linux编程的相关书籍
B.3 Linux内核的相关书籍
B.4 操作系统设计的相关书籍
谨将我们的工作献给 即将毕业离校的兄弟们— 林晓鑫、刘德超、黄巍、周蓝 珺、胡禹轩、王新喜、何春晓、崔剑、李浩。 以及 潘海东即将出世的小Baby! – II –
0 译者序 Linux System Prorgramming ( LSP) 的文工作实 工业 IBM 理 的。工作的同的 同。们林晓鑫、王、崔春、、何春晓、、李、 、、、。的 SMS@lilacbbs.com 文献 的王。刘文、王、刘德超、、王新喜同 校工作。的校。工业文 TeX 作的工作李。 的工作 LSP 文进。 内布原 IBM ( 工程) 晓 ( SUN ) 的们 的业时间对进的校提出的 。们的的同。们示。 程 Harbin Linux User Group 的 , 们示。 程方的工作以 的的。存何方式 我们: Website : http://www.footoo.org Twitter : http://twitter.com/cliffwoo Email :cliffwoo@gmail.com 或 cliffwoo@footoo.org Google Groups :http://groups.google.com/group/lspcn/ 工业 2009 4 30 – III –
0 版权声明 Linux System Programming文的工作工业 IBM 的。文程的, 业。 Linux System Prorgramming的作及原出文 程的。原作及出的出、、作 的。 – IV –
目 录 译者序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III 版权声明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IV 第 1 章 简介和主要概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 调. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1.2 调调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.3 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.4 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 API ABI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.1 API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.2 ABI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3.1 POSIX SUS 的. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3.2 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.3 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 Linux 程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.1 文件文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4.2 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4.6 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4.7 文件空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.4.8 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.4.9 程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4.10 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.4.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.4.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.4.14 进程间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.4.15 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.4.16 处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.5 程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 – V –
第 2 章 文件 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.1 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.1.1 open() 调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.1.2 新文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.1.3 新文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.1.4 creat() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2 read() 读文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.2.2 读的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2.3 读. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.2.5 read() 小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3 write() 写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3.1 写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.3.2 式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.3.3 写. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.3.5 write() 小. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.3.6 write() 的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.4 同步 I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.1 fsync() fdatasync() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.4.3 sync(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.4.4 O SYNC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.4.5 O DSYNC O RSYNC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.5 I/O. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.6 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.7 lseek() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.7.1 文件进 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.8 读写. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.9 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.10I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.10.1 select() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.10.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.10.3 poll() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.10.4 poll() select(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 – VI –
2.11内内. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 2.11.1 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.11.2 页存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.11.3 页写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2.12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 第 3 章 缓冲输入输出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.1 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 3.1.1 小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.1.2 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.1.3 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.2 文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.2.1 式. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.2.2 文件文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.3.1 的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.4 读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.4.1 单读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.4.3 的读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.4.4 读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 3.4.5 读进文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 3.5 写. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.5.1 对的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 3.5.2 写单 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.5.3 写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.5.4 写进 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 3.5.5 I/O 示程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.8 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.9 的文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.11程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.11.1 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.11.2 操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.12对 I/O 的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 3.13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 – VII –
第 4 章 高级文件 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.1 散布 / 聚集 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.1.1 readv() writev() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.2 Event Poll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.2.1 新的 epoll 实 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.2.2 epoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.2.3 Epoll 件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.2.4 件件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.3 存映射. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.3.1 mmap() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.3.2 munmap(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.3.3 存映射子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 4.3.4 mmap() 的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 4.3.5 mmap() 的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.3.6 调映射的小 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 4.3.7 映射的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 4.3.8 映射同步文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 4.3.9 映射提示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 4.4 文件 I/O 提示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.4.1 posix fadvise() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 4.4.2 readahead() 调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 4.4.3 实的操作提示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 4.5 同步 (Synchronized)同步 (Synchronous) 及异步 ( Asynchronous) 操作 . . 117 4.5.1 异步 I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.6 I/O 调 I/O 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 4.6.2 调的能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.6.3 进读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.6.4 的 I/O 调. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 4.6.5 I/O 性能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 4.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 第 5 章 进程管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.1 进程 ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.1.1 进程 ID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 5.1.2 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 5.1.3 pid t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 5.1.4 进程 ID 进程的 ID. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 5.2 新进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 5.2.1 exec 调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 5.2.2 fork() 调. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 – VIII –
分享到:
收藏