第1章 Linux平台环境简单回顾 2
1.1 文件系统及其操作 2
1.1.1 文件系统结构 2
1.1.2 文件I/O操作 5
1.1.3 文件、目录及操作 9
1.2 标准输入输出 17
1.2.1 流和buffer 17
1.2.2 I/O类型 20
1.3 进程概念及控制 22
1.3.1 进程的运行和终止 23
1.3.2 进程间竞争 24
1.3.3 wait操作 25
1.4 信号 25
1.4.1 信号屏蔽字 28
1.4.2 相关操作 30
1.5 本章小结 31
第2章 进程间通信 32
2.1 管道和FIFO 32
2.1.1 管道的创建和使用 32
2.1.2 实例 33
2.1.3 popen 和pclose函数 37
2.1.4 FIFO的创建和使用 37
2.1.5 用FIFO实现多客户服务 38
2.1.6 系统对管理和FIFO的限制 40
2.2 消息队列 41
2.2.1 消息队列的数据结构 41
2.2.2 消息队列的创建 41
2.2.3 消息队列的操作 42
2.2.4 实例 43
2.3.1 信号量的数据结构 46
2.2.5 消息队列的限制 46
2.3 信号量 46
2.3.2 信号量的创建和操作 47
2.4 共享内存区 49
2.4.1 共享内存区的数据结构 50
2.4.2 共享内存区的创建和操作 50
2.4.3 实例 52
2.4.4 共享内存区的限制 55
2.5 本章小结 55
第3章 传输层协议TCP和UDP 56
3.1 TCP/IP基本框架 56
3.1.1 网络协议与层次 56
3.1.2 数据的封装与分角 58
3.2 用户数据报协议(UDP) 59
3.1.3 客户-服务器模型 59
3.2.1 UDP首部 60
3.3 传输控制协议(TCP) 61
3.3.1 顺序传输 61
3.3.2 保证数据的可靠性与完整性 61
3.3.3 双向传输 62
3.3.4 TCP首部 62
3.4 TCP连接的建立、握手与结束 63
3.4.1 连接的建立——三方握手 64
3.4.2 TCP参数 64
3.4.3 TCP连接的终止 65
3.5 端口 66
3.5.1 端口号的分配 66
3.5.2 套接字对 68
3.6 缓冲区 69
3.7 标准Internet服务 71
3.8 本章小结 72
第4章 TCP套接字简介 74
4.1 套接字概述 74
4.2 套接字地址结构 77
4.3 位顺序调整 80
4.3.1 字节处理函数 81
4.3.2 地理转换函数 81
4.4 建立套接字 83
4.5 连接 85
4.5.1 客户端 85
4.5.2 服务器端 87
4.6 服务进程创建 93
4.6.1 函数介绍 93
4.6.2 范例 94
4.7 终止连接 98
4.8 连接地址信息获取 99
4.9 Socket编程Client/Server应用简单示例 102
4.9.1 一个简单WWW浏览器 102
4.9.2 inetd编程 106
4.9.3 获取本地IP 110
4.9.4 DNS的使用 112
4.9.5 从Socket中读出一行语句 113
4.9.6 处理用户登录及极限设置 113
410 本章小结 114
第5章 TCP套接字编程实例 115
5.1 TCP客户——服务器实例一 115
5.1.1 服务器端代码-vcserver.c 115
5.1.2 客户端代码-vcclient.c 120
5.1.3 运行结果 124
5.2.1 服务器端代码-tcpServer.c 126
5.2 实例之二 126
5.2.2 客户端代码-tcpClient.c 130
5.3 本章小结 132
第6章 UDP数据报 133
6.1 UDP通讯机制 133
6.1.1 基本通讯过程 133
6.1.2 UDP与TCP的比较 135
6.1.3 连接的UDP 136
6.1.4 UDP应用实例 138
6.2 UDP的应用场合 142
6.3 增加UDP的可靠性 143
6.4 UDP编程综合实例 144
6.5 本章小结 147
7.1 阻塞式I/O 148
7.1.1 读阻塞 148
第7章 套接字中的I/O模型 148
7.1.2 写阻塞 149
7.1.3 套接字建立中的阻塞 149
7.1.4 实例一 151
7.1.5 实例二 154
7.2 非阻塞式I/O 158
7.2.1 读操作 158
7.2.2 写操作 159
7.2.3 建立连接过程 160
7.2.4 接收连接过程 160
7.2.5 非阻塞方式的实现 160
7.3 实例 161
7.3.1 Talk实例 161
7.3.2 可处理并发服务的echo实例 164
8.1.1 getsockopt函数和setsockopt函数 168
8.1 获取和设置套接字属性 168
第8章 套接字属性控制 168
8.1.2 通用套接字属性 170
8.2 IPv4和IPv6套接字属性 177
8.3 套接字属性控制 183
8.3.1 ioctl函数 183
8.3.2 fcntl函数 184
8.4 本章小结 184
第9章 进程间通讯的同步 186
9.1 互斥锁 186
9.1.1 互斥锁的基本原理 186
9.1.2 互斥锁的基本操作函数 187
9.1.3 编程实例 188
9.2 条件变量 191
9.2.1 条件变量的基本过程 191
9.2.2 条件变量的操作函数 192
9.2.3 编程实例 194
9.3 读写锁 197
9.3.1 基本原理 197
9.3.2 读写锁的操作函数 197
9.4 记录上锁 199
9.4.1 记录上锁的基本原理 199
9.4.2 fcntl记录上锁 199
9.4.3 记录上锁应用举例 201
9.5 本章小结 202
第10章 多路复用和信号驱动I/O 203
10.1 多路复用 203
10.1.1 多路复用的基本原理 203
10.1.2 select函数 204
10.1.3 select应用实例 206
10.2 poll函数 211
10.3 多路复用编程实例 212
10.4 信号驱动I/O 219
10.5 本章小结 223
第11章 高级套接字I/O操作 225
11.1 send和recv函数 225
11.1.1 send 225
11.1.2 recv 226
11.2 readv和writev函数 227
11.2.1 readv函数 227
11.2.2 writev函数 228
11.3 sendto和recvfrom函数 229
11.3.1 sendto函数 229
11.3.2 recvfrom()函数 230
11.3.3 一个运用sendto()和recvfrom()函数的实例 230
11.4 recvmsg和sendmsg函数 232
11.5 辅助数据 233
11.6 本章小结 234
第12章 多线程编程及网络应用 235
12.1 基本概念 235
12.1.1.引入多线程的原因 235
12.1.2 线程的基本概念 236
12.1.3 线程的分类 237
12.2 线程基础 237
12.2.1 线程的基本操作函数 237
12.2.2 简单的多线程编程 239
12.2.3 修改线程的属性 243
12.3 线程应用中的同步问题 245
12.3.1 特定线程数据 245
12.3.2 互斥锁 246
12.3.3 条件变量 248
12.3.4 信号量 251
12.4 多线程编程的网络应用 253
12.4.1 函数的多线程安全性 253
12.4.2 多线程的实际应用 254
12.5 本章小结 255
第13章 IP协议及其属性 256
13.1 IPv4内容 256
13.1.1 IPv4数据报的格式 256
13.1.2 IPv4地址 258
13.1.3 IPv4选项 260
13.1.4 Internet控制报文协议ICMP 263
13.1.5 Internet路由选择协议 264
13.1.6 IPv4的局限性及其缺点 267
13.2 IPv6内容 267
13.2.1 Ipv4 基本头部的格式 268
13.2.2 IPv6到IPv6的变化 270
13.2.3 IPv6地址 270
13.2.4 IPv6的扩展头部 273
13.2.5 IPv6路由 275
第14章 网络编程的安全性问题 276
14.1 系统子程序 276
14.1.1 I/O子程序 276
14.1.2 进程控制 277
14.1.3 文件属性 277
14.1.4 UID和GID的处理 279
14.2 标准C库 279
14.2.1 标准I/O 279
14.2.2 /etc/passwd处理 280
14.2.3 /etc/group的处理 281
14.3 写安全的C程序 282
14.2.4 加密子程序 282
14.2.5 运行shell 282
14.4 root程序的设计 284
14.5 本章小结 285
实例一 Ping 288
实例二 聊天室的实现 297
实例三 端口扫描程序 318
实例四 网页更新检查程序 323
实例五 sniffer的基本实现 329
实例六 IP包检查程序 336
实例七 IP欺骗实例 342
实例八 路由测试程序 347
实例九 Linux防火墙的编写 356
实例十 守护进程 361
实例十一 普通文件传输协议(TFTP) 367
1 使用语法 388
附录一 GCC命令选项 388
2 选项 389
附录二 Makefile文件的编写方法 394
1 Makefile文件的基本结构 394
2 Makefile文件编写规则 395
3 Makefile变量 395
4 假象目的 397
5 函数 398
6 实用Makefile举例 398
7 一个的功能齐全的Makefile 399
附录三 GDB调试器 403
1 GDB的基本使用方法 403
2 GDB命令 409
3 在GDB下运行程序 412