第4章 文件I/O ………………………………………………………………………… 74
4.1 文件系统简介……………………………………………………………………… 74
4.1.1 UNIX/Linux文件系统概述……………………………………………… 75
4.1.2 VFS虚拟文件系统………………………………………………………… 77
4.1.3 索引节点inode …………………………………………………………… 77
4.1.4 文件的类型………………………………………………………………… 78
4.1.5 文件的访问权限…………………………………………………………… 80
4.2 访问文件的内核数据结构………………………………………………………… 81
4.3 文件基本I/O操作………………………………………………………………… 83
4.3.1 打开/创建文件open/creat ……………………………………………… 83
4.3.2 读文件……………………………………………………………………… 87
4.3.3 写文件……………………………………………………………………… 88
4.3.4 文件定位…………………………………………………………………… 90
4.3.5 关闭文件…………………………………………………………………… 92
4.3.6 文件操作举例……………………………………………………………… 93
4.4 文件访问的同步…………………………………………………………………… 95
4.5 项目:文件复制命令的实现……………………………………………………… 96
4.5.1 项目分析与设计…………………………………………………………… 96
4.5.2 项目实施…………………………………………………………………… 98
4.5.3 项目编译与运行…………………………………………………………… 99
第5章 文件属性管理………………………………………………………………… 102
5.1 获取文件属性…………………………………………………………………… 102
5.2 用户/组ID与名字的转换……………………………………………………… 105
5.3 硬链接与符号链接……………………………………………………………… 107
5.3.1 硬链接与符号链接的区别……………………………………………… 107
5.3.2 相关的系统调用函数…………………………………………………… 108
5.4 dup/dup2 ………………………………………………………………………… 109
5.4.1 输入输出重定向………………………………………………………… 109
5.4.2 dup/dup2函数…………………………………………………………… 110
5.5 文件属性的修改………………………………………………………………… 113
5.5.1 修改文件属性…………………………………………………………… 113
5.5.2 改变文件属主及组chown/fchown/lchown …………………………… 114
5.5.3 改变文件访问权限chmod/fchmod …………………………………… 115
5.5.4 改变文件时间utime …………………………………………………… 115
5.5.5 改变文件长度truncate/ftruncate ……………………………………… 116
5.6 项目:显示文件长格式信息……………………………………………………… 116
5.6.1 项目分析与设计………………………………………………………… 116
5.6.2 项目实施………………………………………………………………… 117
5.6.3 项目编译与运行………………………………………………………… 120
第6章 目录文件管理………………………………………………………………… 123
6.1 目录基本操作…………………………………………………………………… 123
6.1.1 打开目录………………………………………………………………… 123
6.1.2 读目录…………………………………………………………………… 124
6.1.3 关闭目录………………………………………………………………… 125
6.2 目录其他操作…………………………………………………………………… 126
6.2.1 改变当前目录…………………………………………………………… 126
6.2.2 创建目录………………………………………………………………… 127
6.2.3 删除目录………………………………………………………………… 128
6.2.4 目录指针定位…………………………………………………………… 128
6.3 项目:显示指定目录下文件列表………………………………………………… 129
6.3.1 项目分析与设计………………………………………………………… 129
6.3.2 项目实施………………………………………………………………… 129
6.3.3 项目编译与运行………………………………………………………… 134
第7章 进程控制………………………………………………………………………… 136
7.1 什么是Shell……………………………………………………………………… 136
7.1.1 用户登录Shell…………………………………………………………… 136
7.1.2 Shell执行命令…………………………………………………………… 137
7.2 进程基本概念…………………………………………………………………… 138
7.2.1 进程标识(ProcessID) ………………………………………………… 138
7.2.2 用户标识………………………………………………………………… 139
7.3 进程控制相关函数……………………………………………………………… 141
7.3.1 创建进程………………………………………………………………… 141
7.3.2 exec*函数……………………………………………………………… 150
7.3.3 进程终止………………………………………………………………… 154
7.3.4 等待进程结束…………………………………………………………… 155
7.3.5 system函数……………………………………………………………… 162
7.4 项目:实现简单的Shell ………………………………………………………… 164
7.4.1 项目分析与设计………………………………………………………… 164
7.4.2 项目实施………………………………………………………………… 165
7.4.3 项目编译与运行………………………………………………………… 167
第8章 线 程…………………………………………………………………………… 169
8.1 线程概念………………………………………………………………………… 169
8.2 线程基本操作…………………………………………………………………… 170
8.3 线程间通信……………………………………………………………………… 175
8.4 项目:线程实例…………………………………………………………………… 179
8.4.1 项目分析与设计………………………………………………………… 179
8.4.2 项目实施………………………………………………………………… 180
8.4.3 项目编译与运行………………………………………………………… 182
第9章 信号与管道…………………………………………………………………… 186
9.1 信号……………………………………………………………………………… 186
9.1.1 信号的概念……………………………………………………………… 186
9.1.2 信号的产生……………………………………………………………… 187
9.1.3 信号的响应方式………………………………………………………… 192
9.1.4 sleep和pause …………………………………………………………… 194
9.1.5 信号集…………………………………………………………………… 197
9.2 管道……………………………………………………………………………… 207
9.2.1 管道基本概念…………………………………………………………… 207
9.2.2 FIFO ……………………………………………………………………… 214
第10章 进程间通信(IPC)…………………………………………………………… 218
10.1 System VIPC介绍…………………………………………………………… 218
10.2 System V信号量……………………………………………………………… 220
10.3 System V共享内存…………………………………………………………… 226
10.4 System V消息队列…………………………………………………………… 231
第11章 网络编程……………………………………………………………………… 239
11.1 网络编程基本概念……………………………………………………………… 239
11.1.1 常用网络相关命令和配置文件………………………………………… 239
11.1.2 软件体系结构…………………………………………………………… 243
11.1.3 网络协议及OSI参考模型……………………………………………… 245
11.1.4 IP地址和端口………………………………………………………… 248
11.1.5 字节顺序………………………………………………………………… 250
11.1.6 网络数据传输方式……………………………………………………… 253
11.2 套接字编程基础………………………………………………………………… 254
11.2.1 套接字简介……………………………………………………………… 254
11.2.2 套接字地址结构………………………………………………………… 255
11.2.3 面向连接套接字通信过程……………………………………………… 257
11.2.4 面向无连接套接字通信过程…………………………………………… 258
11.3 套接字编程相关函数…………………………………………………………… 259
11.3.1 socket …………………………………………………………………… 259
11.3.2 bind……………………………………………………………………… 260
11.3.3 listen …………………………………………………………………… 261
11.3.4 accept …………………………………………………………………… 261
11.3.5 connect ………………………………………………………………… 262
11.3.6 send……………………………………………………………………… 263
11.3.7 recv ……………………………………………………………………… 263
1.3.8 close …………………………………………………………………… 264
11.3.9 sendto…………………………………………………………………… 264
11.3.10 recvfrom ……………………………………………………………… 265
11.4 项目:基于网络的进程间通信………………………………………………… 266
11.4.1 项目分析与设计………………………………………………………… 266
11.4.2 项目实施………………………………………………………………… 267
11.4.3 项目运行………………………………………………………………… 269
11.5 基于UDP的网络编程………………………………………………………… 272
11.6 域名解析………………………………………………………………………… 276
11.6.1 域名概述………………………………………………………………… 276
11.6.2 IP地址形式转换……………………………………………………… 278
11.6.3 IP地址与主机名……………………………………………………… 280
第12章 Linux网络传输系统………………………………………………………… 286
12.1 项目构思………………………………………………………………………… 286
12.2 项目设计………………………………………………………………………… 287
12.3 项目实施………………………………………………………………………… 289
12.4 项目运行………………………………………………………………………… 294
附录A Linux主要的系统调用……………………………………………………… 297
附录B 标准……………………………………………………………………………… 304
附录C ASCII码………………………………………………………………………… 307
附录D 学习知识要点及能力要点…………………………………………………… 309
参考文献…………………………………………………………………………………… 315