第1章 Linux C程序概论 1
1.1 Linux简介 1
1.1.1 为什么选择Linux 1
1.1.2 为什么选择C语言 1
1.2 开发第一个程序 2
1.3 怎样获取帮助信息 3
1.3.1 使用man命令 3
1.3.2 指定man的搜索路径 4
1.3.3 一个小技巧 5
1.4 Linux C程序的框架 5
1.4.1 关于程序的存放目录 5
1.4.2 头文件 5
1.4.3 函数库 6
1.4.4 静态函数库 7
1.4.5 共享函数库 9
1.5 一些公理 9
第2章 文件操作 11
2.1 Linux文件结构 11
2.1.1 文件与目录 11
2.1.2 文件与设备 12
2.2 系统调用和设备驱动程序 13
2.3 库函数 13
2.4 低级文件操作 14
2.4.1 write 14
2.4.2 read 15
2.4.3 open 16
2.4.4 umask 17
2.4.5 close 18
2.4.6 ioctl 18
2.4.7 例子程序copy_file 19
2.4.8 其他与文件操作有关的系统调用 20
2.5 标准输入输出库 22
2.5.1 fopen 23
2.5.2 fread 23
2.5.3 fwrite 24
2.5.4 felose 24
2.5.5 fflush 24
2.5.6 fseek 24
2.5.7 fgete,getc,getchar 25
2.5.8 fputc,putc,putchar 25
2.5.9 fgets,gets 25
2.5.10 格式输入输出 25
2.5.11 其他流操作函数 28
2.5.12 流错误信息 29
2.5.13 流与文件描述符 30
2.6 一些与文件有关的函数 30
2.6.1 chmod 30
2.6.2 chown 30
2.6.3 unlink,link,symlink 31
2.6.4 mkdir,rmdir 31
2.6.5 chdir,getcwd 31
2.6.6 错误信息 32
2.7 搜索路径的例子程序 33
2.7.1 opendir 33
2.7.2 readdir 33
2.7.3 telldir 33
2.7.4 seekdir 34
2.7.5 closedir 34
2.7.6 例子程序show_dir 34
2.8 两个特殊的函数 37
2.8.1 fcntl 37
2.8.2 mmap 37
第3章 环境变量 41
3.1 程序的参数 41
3.1.1 程序的参数 41
3.1.2 环境变量 44
3.1.3 获取全部的环境变量 47
3.2 时间和日期 48
3.2.1 time 48
3.2.2 gmtime,ctime 49
3.2.3 strftime,strptime 51
3.3 临时文件 54
3.4 主机信息 56
3.4.1 用户信息 56
3.4.2 主机信息 59
3.5 系统日志 60
3.5.1 日志函数 60
3.5.2 配置日志 62
3.6 资源和限制 63
第4章 屏幕开发库curses 68
4.1 curses简介 68
4.2 基本的屏幕输出函数 70
4.2.1 初始化和终止 70
4.2.2 输出 70
4.2.3 读入 71
4.2.4 清屏 71
4.2.5 移动 72
4.2.6 字符属性 72
4.3 响应键盘事件 75
4.3.1 键盘模式 75
4.3.2 读取键盘 75
4.4 多窗口 78
4.4.1 WINDOW结构 78
4.4.2 移动和更新窗口 79
4.4.3 刷新屏幕的优化方法 82
4.5 子窗口 83
4.6 keypad函数 85
4.7 颜色 88
4.8 高级应用:虚屏 90
4.9 curses的帮助 92
第5章 数据管理 100
5.1 内存管理 100
5.1.1 简单的内存分配 100
5.1.2 分配大量的内存 102
5.1.3 空指针 105
5.1.4 释放内存 106
5.1.5 其他分配内存的函数 107
5.2 文件锁 108
5.2.1 创建加锁文件 108
5.2.2 区域加锁 111
5.2.3 加锁之后的读写 113
5.2.4 竞争加锁 119
5.2.5 其他加锁函数 122
5.2.6 死锁 123
5.3 DBM数据库 123
5.3.1 DBM数据库 123
5.3.2 dbm程序 124
5.3.3 dbm基本函数 124
5.3.4 其他dbm函数 128
第6章 开发工具箱 133
6.1 make命令和Makefile文件 133
6.1.1 多文件的编译问题 133
6.1.2 Makefile文件的构成 134
6.1.3 make命令的参数选项 135
6.1.4 依赖关系 135
6.1.5 依赖规则 136
6.1.6 Makefile文件的注释 138
6.1.7 Makefile文件的宏 138
6.1.8 多目标 140
6.1.9 固定规则与后缀规则 142
6.1.10 使用make管理函数库 145
6.1.11 makefile文件和子目录 147
6.1.12 GNU的make和gcc 148
6.2 源代码控制 148
6.2.1 RCS 149
6.2.2 SCCS 155
6.3 怎样写帮助文件 155
6.4 程序维护的一些问题 159
6.4.1 发布软件 159
6.4.2 给程序打补丁 159
6.4.3 其他维护工具 161
6.4.4 tar命令的描述 163
第7章 如何调试程序 164
7.1 错误类型 164
7.1.1 需求错误 164
7.1.2 设计错误 165
7.1.3 编码错误 165
7.2 调试前的准备工作 165
7.2.1 一个含有错误的程序 165
7.2.2 代码检查 168
7.2.3 输出附加信息 168
7.2.4 不需要重新编译的技巧 170
7.2.5 跟踪程序的执行 170
7.3 使用gdb 171
7.3.1 启动gdb 171
7.3.2 执行程序 172
7.3.3 堆栈跟踪 172
7.3.4 检查变量 173
7.3.5 查看源程序 174
7.3.6 设置断点 175
7.3.7 在调试器中打补丁 179
7.3.8 关于gdb的其他功能 181
7.4 其他调试工具 181
7.4.1 不可忽略的警告 181
7.4.2 函数查看工具 183
7.4.3 监管程序的执行 186
7.4.4 变量范围声明 187
7.4.5 内存越界检查 188
第8章 进程与信号 191
8.1 什么是进程 191
8.2 进程的结构 192
8.2.1 进程中的共享与独占 192
8.2.2 进程表 192
8.3 创建新进程 196
8.4 信号 211
8.4.1 如何捕捉信号 212
8.4.2 发送信号 214
8.4.3 信号集合 217
8.4.4 功能强大的sigaction函数 218
第9章 管道 221
9.1 什么是管道 221
9.2 进程管道 222
9.2.1 接收与发送数据 223
9.2.2 操作大量的数据 225
9.2.3 popen是如何实现的 226
9.3 pipe函数 228
9.4 在父、子进程中使用管道 231
9.4.1 利用命令行参数 231
9.4.2 读关闭的管道 234
9.4.3 使用标准输入输出端口 234
9.5 有名管道——FIFO 238
9.5.1 创建有名管道 238
9.5.2 访问有名管道 239
9.5.3 使用open打开有名管道 240
9.5.4 对FIFO的读写 243
9.6 Client/Server模式下的FIFO 247
第10章 IPC机制 253
10.1 信号量 253
10.1.1 信号量的定义 254
10.1.2 一个理论的例子 254
10.1.3 UNIX信号量函数 255
10.2 共享内存 262
10.2.1 概要介绍 262
10.2.2 共享内存函数 263
10.2.3 例子程序 265
10.3 消息队列 269
10.3.1 概要介绍 270
10.3.2 消息队列函数 270
10.3.3 例子程序 272
10.4 IPC外部命令 275
10.4.1 信号量 275
10.4.2 共享内存 276
10.4.3 消息队列 276
第11章 套接口 277
11.1 概要 278
11.1.1 套接口的连接 278
11.1.2 套接口属性 283
11.2 套接口函数 284
11.2.1 创建套接口 285
11.2.2 套接口地址 286
11.2.3 给套接口命名 287
11.2.4 建立监听队列 288
11.2.5 接受连接 289
11.2.6 建立连接请求 289
11.2.7 关闭套接口 291
11.2.8 套接口通信 291
11.2.9 主机和网络字节顺序 294
11.3 网络信息 296
11.3.1 主机信息 296
11.3.2 服务信息 299
11.4 套接口选项 301
11.5 多客户 305
11.6 select函数 308
11.6.1 函数介绍 308
11.6.2 终端上的应用 310
11.6.3 多客户套接口连接的应用 311
11.7 inetd的秘密 315
11.8 UDP通信简介 320
第12章 Linux下的CGI 324
12.1 概述 324
12.2 一些相关的HTML标记 325
12.2.1 FORM元件 325
12.2.2 FORM标记 326
12.2.3 INPUT标记 327
12.3 一个简单的主页 329
12.4 向WWW服务器发送信息 332
12.5 如何编写CGI程序 333
12.5.1 相关的环境变量 333
12.5.2 使用shell编写CGI程序 334
12.5.3 如何使用C开发CGI程序 338
12.5.4 使用Perl开发CGI程序 345
12.6 以HTML格式反馈客户 347
12.7 几个技巧和注意事项 354
12.7.1 确认CGI程序已经退出 354
12.7.2 重定向客户 354
12.7.3 动态图片 355
12.7.4 编写小程序 355
附录A 开发MySQL应用程序 356
Ⅰ 简介 356
Ⅱ 创建库和表 357
Ⅲ 向表中增加记录 360
Ⅳ 查看表中数据 362
附录B 使用Libpcap函数库 367
Ⅰ 简介 367
Ⅱ 几个重要的API 368
Ⅲ 一个例子程序 369
Ⅳ 其他API的介绍 373