第1章 Linux系统管理 1
1.1 登录与注销 1
1.1.1 登录Linux 1
1.1.2 更改口令 1
1.1.3 了解shell 2
1.1.4 了解shell环境 3
1.1.5 配置shell环境 4
1.1.6 注销 4
1.2 信息查询命令 5
1.2.1 date命令 5
1.2.3 du命令 6
1.2.2 df命令 6
1.2.4 file命令 7
1.2.5 hostname命令 7
1.2.6 id命令 8
1.2.7 ps命令 8
1.2.8 quota命令 9
1.2.9 stty命令 9
1.2.10 time命令 10
1.2.11 ttY命令 10
1.2.12 w命令 10
1.2.13 whereis命令 11
1.2.14 who命令 11
1.4 管理用户 12
1.3.2 使用LILO 12
1.3 Linux装载程序LILO 12
1.3.1 配置LILO 12
1.4.1 添加用户 13
1.4.2 使用adduser命令 13
1.4.3 设置用户口令 13
1.4.4 删除用户 14
1.5 管理用户组 14
1.5.1 添加用户组 14
1.5.2 删除用户组 15
1.6 管理文件系统 15
1.6.1 安装文件系统 15
1.6.2 卸下文件系统 16
1.7.1 了解TCP/IP配置文件 17
1.6.3 维护文件系统 17
1.7 配置TCP/IP网络 17
1.7.2 主机配置文件 18
1.7.3 初始化以太网接口 18
1.7.4 用ifconfig检查网络接口 19
1.7.5 配置软件回送接口 20
1.7.6 配置网络接口 20
1.8 小结 20
第2章 网络服务器的配置 21
2.1 配置FTP服务器 21
2.1.1 FTP服务器简介 21
2.1.2 安装FTP服务器 21
2.1.3 查看FTP服务器的设置 22
2.1.4 配置访问控制文件ftpaccess 23
2.1.5 配置用户控制文件ftpusers 28
2.1.6 配置主机控制文件ftphosts 29
2.1.7 测试服务器是否正常工作 29
2.1.8 wu-ftp提供的几个程序 30
2.2 配置WWW服务器 30
2.2.1 WWW服务器简介 30
2.2.2 Apache服务器介绍 31
2.2.3 安装Apache服务器 31
2.2.4 配置服务器控制文件httpd.conf 31
2.2.5 配置访问控制文件access.conf 37
2.2.6 配置资源控制文件srm.Conf 38
2.2.7 运行服务器程序 42
2.2.9 浏览个人主页 43
2.2.8 测试服务器运行情况 43
2.3 小结 44
第3章 Linux文件系统 45
3.1 目录 45
3.1.1 目录结构 45
3.1.2 getcwd函数 46
3.1.3 读取目录 47
3.2 文件 49
3.2.1 文件的存储 49
3.2.2 文件的存储权限 50
3.2.3 stat和fstat函数 51
3.2.4 得到用户的信息 55
3.3.1 ustat函数 58
3.3 文件系统信息 58
3.3.2 statfs和fstatfs函数 60
3.4 小结 62
第4章 Linux文件系统调用 63
4.1 文件描述符 63
4.2 open和close函数 63
4.3 read和write函数 64
4.4 lseek函数 67
4.5 link和unlink函数 71
4.6 access函数 72
4.7 chmod,chown和chdir函数 74
4.8 mkdir和rmdir函数 75
4.9 mknod函数 75
4.10 dup和dup2函数 76
4.11 小结 77
第5章 Linux设备文件 78
5.1 设备文件简介 78
5.2 设备文件的创建 78
5.3 终端设备文件 78
5.3.1 终端设备文件的读写 78
5.3.2 终端设备文件的控制 80
5.4 软盘设备文件 87
5.4.1 软盘设备文件的读写 87
5.4.2 软盘的外挂和sync函数 90
5.5 小结 93
6.1.1 task-struct结构 94
6.1 Linux中的进程 94
第6章 Linux进程管理 94
6.1.2 进程状态 95
6.1.3 进程标识 96
6.1.4 进程调度 96
6.1.5 Linux进程调度算法 97
6.2 Linux进程系统调用 97
6.2.1 fork与vfork函数 97
6.2.2 exec函数 101
6.2.3 exit与_exit函数 104
6.2.4 wait与waitpid函数 104
6.3 小结 105
7.2 信号类别 106
7.1 信号简介 106
第7章 信号处理 106
7.3 关于信号的系统调用 107
7.3.1 kill命令及kill函数 107
7.3.2 有关信号集合的调用 108
7.3.3 signal与sigaction函数 110
7.3.4 信号处理的另外一些调用 112
7.3.5 pause与sigsuspend函数 113
7.3.6 siglongimp与sigsetjmp函数 118
7.4 小结 120
第8章 基本进程间通信 121
8.1 管道通信 121
8.1.1 普通管道与pipe函数 121
8.1.2 命名管道与mknod函数 124
8.2 消息 129
8.2.1 msgget函数 129
8.2.2 msgctl函数 129
8.2.3 msgsnd和msgrcv函数 130
8.3 小结 134
第9章 临界区与高级进程间通信 135
9.1 竞争现象与临界区 135
9.2 信号量 136
9.2.1 简介 136
9.2.2 信号量集 137
9.2.3 semget函数 137
9.2.4 semctl函数 138
9.2.5 semop函数 139
9.3 共享内存 142
9.3.1 shmget函数 142
9.3.2 shmat函数 142
9.3.3 shmdt函数 143
9.3.4 shmctl函数 143
9.3.5 生产者/消费者问题 144
9.4 小结 151
第10章 Linux线程 152
10.1 线程简介 152
10.1.1 传统进程的局限性 152
10.1.2 线程的动机 152
10.1.4 线程概念 153
10.1.5 用户线程与内核线程 153
10.1.3 多线程和多处理器 153
10.2 线程管理 155
10.2.1 pthread_create函数 155
10.2.2 pthread_self函数 156
10.2.3 pthread_exit函数 156
10.2.4 pthread_join函数 156
10.2.5 线程的例子 156
10.3 线程属性 159
10.3.1 线程属性对象的初始化和销毁 160
10.3.2 线程堆栈的大小 161
10.3.3 线程堆栈的地址 161
10.3.4 线程的拆卸状态 161
10.3.7 线程的调度策略 162
10.3.5 线程的作用域 162
10.3.6 线程的继承性 162
10.3.8 线程的调度参数 163
10.3.9 得到线程的属性 163
10.4 小结 166
第11章 TCP/IP简介 167
11.1 网络简介 167
11.2 TCP/IP及相关协议 167
11.2.1 IP协议 167
11.2.2 ICMP协议 169
11.2.3 ARP协议 171
11.2.4 TCP协议 172
11.2.5 UDP协议 175
11.2.6 DNS协议 176
11.3 小结 179
第12章 各种转换 180
12.1 网络字节序转换函数 180
12.2 IP地址的转换 180
12.2.1 inet_aton与inet_addr函数 180
12.2.2 inet_pton与inet_ntop函数 181
12.3 名字地址的转换 182
12.3.1 gethostbyname函数与gethostbyname2函数 182
12.3.2 gethostbyaddr函数 183
12.3.3 uname和gethostname函数 183
12.3.4 得到主机的信息 184
12.4 服务名的转换 186
12.4.2 getservbyport函数 187
12.4.1 getservbyname函数 187
12.5 高级地址转换 188
12.5.1 getaddrinfo函数 188
12.5.2 getnameinfo函数 190
12.6 小结 190
第13章 套接字编程 191
13.1 套接字简介 191
13.2 套接字编程调用 191
13.2.1 socket函数 192
13.2.2 connect函数 193
13.2.3 bind函数 193
13.2.4 listen函数 194
13.2.5 accept函数 194
13.2.7 recv函数 195
13.2.6 read函数 195
13.2.8 recvfrom函数 196
13.2.9 write函数 196
13.2.10 send函数 196
13.2.11 sendto函数 196
13.2.12 close函数 197
13.2.13 getsockname和getpeername函数 197
13.3 gettime程序 198
13.4 ourhead.h文件 200
13.5 小结 202
14.1 TCP套接字编程 203
14.1.1 简介 203
第14章 客户机服务器编程 203
14.1.2 客户机程序的简化 204
14.1.3 服务器程序的并发 205
14.1.4 ECHO客户机程序的TCP版本 207
14.1.5 ECHO服务器程序的TCP版本 208
14.2 UDP套接字编程 211
14.2.1 简介 211
14.2.2 客户机程序的简化 211
14.2.3 ECHO客户机程序的UDP版本1 213
14.2.4 ECHO客户机程序的UDP版本2 215
14.2.5 ECHO服务器程序的UDP版本 218
14.3 小结 219
15.1.2 select函数 220
15.1.1 多协议服务器简介 220
15.1 多协议服务器 220
第15章 复杂服务器设计 220
15.1.3 ECHO服务器的TCP/UCP合并版 221
15.1.4 ECHO客户机的TCP/UCP合并版 225
15.2 多服务服务器 227
15.2.1 多服务服务器简介 227
15.2.2 ECHO,DAYTIME多服务服务器程序 227
15.2.3 ECHO,DAYTIME多服务客户机程序 231
15.2.4 多协议多服务服务器程序 233
15.2.5 多协议多服务客户机程序 239
15.3 小结 241
第16章 远程过程调用 242
16.1 简介 242
16.2.2 初始化XDR流 246
16.2.3 释放XDR流 246
16.2 外部数据表示(XDR) 246
16.2.1 XDR工作原理 246
16.2.4 整数的XDR表示 247
16.2.5 无符号整数的XDR表示 247
16.2.6 枚举型的XDR表示 248
16.2.7 布尔量的XDR表示 248
16.2.8 浮点数的XDR表示 248
16.2.9 双精度浮点数的XDR表示 249
16.2.10 字符的XDR表示 249
16.2.11 字符串的XDR表示 250
16.2.12 定长数组的XDR表示 250
16.2.13 变长数组的XDR表示 251
16.2.14 XDR的例子 252
16.3 小结 255
第17章 RPC编程 256
17.1 RPC编程简介 256
17.1.1 RPC程序号、版本号和过程号 256
17.1.2 网络选择 256
17.1.3 rpcbind设施 258
17.2 RPC调用 259
17.2.1 clnt_create函数 259
17.2.2 clnt_call函数 260
17.2.3 svcudp_create函数 260
17.2.4 svctcp_create函数 260
17.2.7 svc_sendreply函数 261
17.2.5 svc_register函数 261
17.2.6 svc_run函数 261
17.3 远程计算器 262
17.3.1 头文件xdr_math.h 262
17.3.2 客户机程序 263
17.3.3 服务器程序 265
17.3.4 程序的编译和运行 267
17.4 小结 268
第18章 用rpcgen生成分布式程序 269
18.1 rpcgen简介 269
18.2 rpcgen的输入和输出 269
18.3.2 运行rpcgen 270
18.3.1 建立.x文件 270
18.3 rpcgen编程步骤 270
18.3.3 rpcgen生成的math.h文件 271
18.3.4 rpcgen生成的math_xdr.c文件 272
18.3.5 rpcgen生成的math_clnt.c文件 273
18.3.6 rpcgen生成的math_svc.c文件 274
18.3.7 rpcgen生成的math_server.c文件 276
18.3.8 rpcgen生成的math_client.c文件 277
18.3.9 rpcgen生成的makefile.math文件 280
18.4 小结 281
第19章 RPC认证 282
19.1 简介 282
19.2 取得客户机的认证风格 282
19.3 AUTH_NONE认证 286
19.4 AUTH_SYS认证 287
19.4.1 设置AUTH_SYS认证 287
19.4.2 AUTH_SYS认证的例子 287
19.5 AUTH_DES认证 293
19.5.1 设置AUTH_DES认证 293
19.5.2 AUTH_DES认证的例子 295
19.6 小结 298
第20章 GTK图形界面编程 299
20.1 CTK简介 299
20.2 第一个GUI应用程序 299
20.2.1 初始化 300
20.2.2 建立窗口 300
20.2.4 设置窗口大小 301
20.2.5 设置边框 301
20.2.3 设置标题 301
20.2.6 第一个GTK程序 302
20.2.7 程序的编译和执行 302
20.2.8 增加对信号的处理 303
20.3 增加一个按钮 305
20.4 小结 307
第21章 按钮与封装 308
21.1 按钮 308
21.1.1 建立按钮 308
21.1.2 按钮信号处理 308
21.1.3 一个按钮的例子 309
21.2 双态按钮 310
21.3 复选按钮 313
21.4 单选按钮 313
21.5 封装构件 315
21.5.1 封装简介 315
21.5.2 用盒子封装构件 316
21.5.3 盒子封装的例子 316
21.5.4 用表格封装构件 318
21.5.5 表格封装的例子 320
21.6 图像按钮 322
21.7 小结 324
22.1.2 设置标签正文 325
22.1.1 创建标签 325
22.1.3 得到标签正文 325
22.1 标签 325
第22章 GTK常用构件 325
22.2 编辑框 326
22.2.1 创建编辑框 326
22.2.2 得到编辑框正文 326
22.2.3 改变编辑框正文 326
22.2.4 设置编辑框属性 326
22.2.5 编辑框的信号 327
22.2.6 编辑框的例子 327
22.3 列表框 330
22.3.1 创建列表框 330
22.3.2 操作列表框 330
22.4 复合框 331
22.3.3 列表框的信号 331
22.4.1 创建和操作复合框 332
22.4.2 复合框的信号 332
22.5 进度条 332
22.5.1 建立进度条 333
22.5.2 用定时器测试进度条 333
22.6 框架 336
22.6.1 创建框架 336
22.6.2 框架的例子 337
22.7 小结 338
第23章 状态条、工具条和菜单 340
23.1 状态条 340
23.1.1 创建状态条 340
23.1.2 向状态条添加表项 340
23.1.3 从状态条移走表项 340
23.1.4 状态条的例子 341
23.2 工具条 342
23.2.1 创建工具条 343
23.2.2 向工具条增加按钮 343
23.2.3 向工具条上添加像元图 344
23.2.4 工具条的例子 345
23.3 菜单 346
23.3.1 手工建立菜单 347
23.3.2 用套件建立菜单 351
23.3.3 检查菜单项 355
23.3.4 选择菜单项 357
23.4 小结 359
24.1 初步建立对话框 361
第24章 对话框 361
24.2 两种类型的对话框 362
24.2.1 无模式对话框 362
24.2.2 模式对话框 366
24.3 文件选择对话框 369
24.3.1 创建文件选择对话框 369
24.3.2 文件选择对话框的例子 369
24.3.3 结构GtkFileSelection的定义 372
24.4 小结 372
第25章 GTK式样 373
25.1 简介 373
25.2 颜色 373
25.2.1 从系统分配颜色 373
25.2.2 创建颜色选择对话框 374
25.2.3 颜色选择对话框的例子 375
25.3 字体 379
25.3.1 创建字体选择对话框 380
25.3.2 字体选择对话框的例子 380
25.4 小结 385
第26章 高级GTK构件 386
26.1 树构件 386
26.1.1 树构件的创建 386
26.1.2.树构件的信号 387
26.1.3 树构件的例子 387
26.2 列表构件 391
26.2.1 创建列表构件 391
26.2.4 删除行 392
26.2.5 提高插入和删除速度 392
26.2.3 修改列表构件中的数据 392
26.2.2 向列表构件增加数据 392
26.2.6 行与列参数 393
26.2.7 标题栏 393
26.2.8 插入像元图 394
26.2.9 列表构件的例子 394
26.3 笔记本构件 397
26.3.1 创建笔记本构件 397
26.3.2 操作页 397
26.3.3 增加和删除页 398
26.3.4 笔记本构件的例子 399
26.4 小结 402
参考文献 403