标题：从零开始学Linux编程（含DVD光盘1张）
基本信息
作　者：罗利民，王浩　编著
出 版 社：电子工业出版社[1]
出版时间：2012-6-1
版　次：1
页　数：327
印刷时间：2012-6-1
开　本：16开
内容简介
Linux系统可以免费地应用到多种服务器上，所以开发人员都在往Linux系统上转移，且很多开发都是使用C语言来完成的，这也是本书推出的关键所在。本书共分为五篇：第一篇是Linux系统知识，讲述Linux系统的安装和使用、常用命令、文本编辑器及程序的编译与调试；第二篇是C语言基本知识，讲述C语言的基本语法、指针、结构体、系统库函数等知识；第三篇是Linux系统编程，讲述Shell编程和文件处理方法；第四篇是Linux网络编程，讲解TCP和UDP网络编程的知识；第五篇是Linux C项目实战，通过案例的学习，既复习了前面介绍的知识，也了解了项目实践的流程和技巧，从而增加读者的编辑经验。
目录
目 录
第1篇 Linux系统知识
第1章 认识Linux系统 1
1.1 Linux发行版的介绍 1
1.1.1 Red Hat Linux 1
1.1.2 Debian Linux 1
1.2 Linux的安装 2
1.2.1 Linux的分区格式 2
1.2.2 在Windows系统中
划分Linux分区 2
1.2.3 Red Hat Linux 9.0的
安装 4
1.2.4 GRUB在Windows
分区中引导Linux 13
1.3 VMware虚拟机安装Linux
系统 15
1.3.1 VMware软件安装 15
1.3.2 新建虚拟计算机 17
1.3.3 VMware的使用 21
1.3.4 在VMware虚拟机中
安装Linux系统 23
1.4 第一个C程序 25
1.4.1 在Linux中编写C程序
代码 25
1.4.2 编译程序 25
1.5 小结 26
1.6 小测试 26
第2章 常用的Linux操作命令 28
2.1 目录与文件命令 28
2.1.1 查看目录命令pwd 28
2.1.2 打开目录命令cd 28
2.1.3 查看目录命令ls 29
2.1.4 建立文件命令touch 30
2.1.5 建立与删除文件夹
命令mkdir、rmdir 30
2.1.6 文件复制命令cp 31
2.1.7 文件移动和更名
命令mv 32
2.1.8 删除文件与目录
命令rm 32
2.1.9 创建链接命令ln 33
2.1.10 查看文件信息
命令wc 33
2.1.11 文件查看命令cat 34
2.1.12 查看文件视图
命令head与tail 34
2.1.13 文件权限设置
命令chmod 35
2.1.14 查找文件命令find 36
2.2 man系统帮助命令 36
2.2.1 man手册的使用方法 37
2.2.2 帮助文档的结构 37
2.3 info手册 38
2.4 小结 39
2.5 小测试 39
第3章 文本编辑器的使用 40
3.1 VIM的使用 40
3.1.1 VIM的启动 40
3.1.2 在桌面上创建VIM
启动器 40
3.1.3 VIM的工作模式 41
3.1.4 保存与打开文件 42
3.1.5 移动光标 43
3.1.6 常用操作 43
3.1.7 选项设置 45
3.1.8 调用shell命令 46
3.2 VIM使用实例 46
3.2.1 字符的插入与删除 46
3.2.2 字符的查找与替换 47
3.3 带菜单的GVIM 48
3.3.1 文件的新建与保存 48
3.3.2 查找与替换 49
3.4 图形化的gedit 50
3.4.1 gedit的启动与打开
文件 50
3.4.2 gedit编辑文件 50
3.4.3 gedit打印文件 51
3.4.4 gedit的首选项 52
3.5 小结 54
3.6 小测试 55
第4章 编译与调试 56
4.1 编译的概念和理解 56
4.1.1 程序编译的过程 56
4.1.2 编译器 57
4.2 gcc编译器 57
4.2.1 gcc编译器简介 57
4.2.2 gcc对源程序扩展名
的支持 57
4.3 C程序的编译 58
4.3.1 编写第一个C程序 58
4.3.2 用gcc编译程序 59
4.3.3 查看gcc的参数 59
4.3.4 设置输出的文件 60
4.3.5 查看编译过程 61
4.3.6 设置编译的语言 61
4.4 编译过程的控制 62
4.4.1 编译过程简介 62
4.4.2 控制预处理过程 63
4.4.3 生成汇编代码 63
4.4.4 生成目标代码 64
4.4.5 链接生成可执行文件 64
4.5 gdb调试程序 65
4.5.1 gdb简介 65
4.5.2 在程序中加入调试
信息 65
4.5.3 启动gdb 65
4.5.4 在gdb中加载需要
调试的程序 66
4.5.5 在gdb中查看代码 66
4.5.6 在程序中加入断点 66
4.5.7 查看断点 67
4.5.8 运行程序 67
4.5.9 查看变量 68
4.6 程序调试实例 69
4.6.1 编写一个程序 69
4.6.2 编译文件 70
4.6.3 程序调试 70
4.6.4 gdb帮助的使用 72
4.7 gdb常用命令 72
4.8 编译程序常见的错误与问题 74
4.8.1 逻辑错误与语法错误 74
4.8.2 C程序中的错误与
异常 74
4.8.3 编译中的警告提示 74
4.8.4 找不到包含文件的
错误 75
4.8.5 错误地使用逗号 75
4.8.6 括号不匹配错误 75
4.8.7 小括号不匹配错误 76
4.8.8 变量类型或结构体声明
错误 76
4.8.9 使用不存在的函数
错误 76
4.8.10 大小写错误 76
4.8.11 数据类型错误 77
4.8.12 赋值类型错误 77
4.8.13 循环或判断语句中
多加分号 77
4.9 小结 78
4.10 小测试 78
第2篇 C语言基本知识
第5章 C语言基础 79
5.1 C程序的基本概念 79
5.1.1 C程序的基本结构 79
5.1.2 C程序的一般格式 80
5.1.3 C程序中的注释 81
5.2 数据类型 82
5.2.1 整型（int） 82
5.2.2 浮点型（float） 83
5.2.3 字符型（char） 84
5.2.4 变量名 85
5.2.5 字符NULL 86
5.3 变量赋值与输出 86
5.3.1 变量赋值 86
5.3.2 printf函数输出变量 86
5.3.3 scanf函数从键盘
读入变量 88
5.4 运算符 89
5.4.1 算术运算符 89
5.4.2 关系运算符 91
5.4.3 逻辑运算符 91
5.5 小结 92
5.6 小测试 93
第6章 C程序的常用语句 94
6.1 流程控制语句 94
6.1.1 if条件语句 94
6.1.2 if语句嵌套 96
6.1.3 switch选择执行语句 98
6.1.4 for循环语句 99
6.1.5 for循环嵌套 101
6.1.6 for循环应用实例：输出
九九乘法口诀表 102
6.1.7 while循环语句 103
6.1.8 do while循环语句 104
6.1.9 转移控制语句：
continue 105
6.1.10 转移控制语句：
break 106
6.1.11 转移控制语句：
return 106
6.2 流程控制语句实例 107
6.2.1 三个数字的排序 107
6.2.2 解一元二次方程 108
6.3 两种特殊语句结构 111
6.3.1 三元操作符 111
6.3.2 块语句 112
6.4 小结 112
6.5 小测试 112
第7章 数组与指针 114
7.1 数组的理解与操作 114
7.1.1 什么是数组 114
7.1.2 数组的定义与访问 115
7.1.3 数组使用实例 116
7.2 指针 117
7.2.1 对指针的理解 117
7.2.2 指针操作符 117
7.2.3 指针的定义与访问 118
7.2.4 指针使用实例 119
7.3 数组与指针 120
7.3.1 数组与指针的关系 120
7.3.2 指针的算术运算 120
7.3.3 字符数组与字符串 121
7.4 二维数组与多维数组 122
7.4.1 对二维数组的理解 122
7.4.2 二维数组与指针 123
7.5 实例 125
7.5.1 学生成绩统计实例 125
7.5.2 冒泡法排序实例 126
7.5.3 统计字符串中的字符 127
7.5.4 小写字母转换成大写
字母 129
7.5.5 用指针访问数组 130
7.6 常见问题 131
7.6.1 错误的写操作 131
7.6.2 指针的错误赋值 132
7.6.3 数组指针的越界错误 133
7.7 小结 134
7.8 小测试 134
第8章 函数 135
8.1 对函数的理解 135
8.1.1 什么是函数 135
8.1.2 系统函数（库函数）
与用户自定义函数 136
8.1.3 函数的返回值 137
8.1.4 无参函数 138
8.1.5 有参函数 138
8.1.6 函数参数实例 138
8.2 自定义函数 140
8.2.1 自定义函数的编写 140
8.2.2 函数中调用函数 141
8.2.3 函数声明 143
8.2.4 递归函数 144
8.2.5 main函数的参数
argc与argv 145
8.3 函数与指针 145
8.3.1 值调用与引用调用 146
8.3.2 引用调用与指针 146
8.3.3 指针参数实例 147
8.3.4 自定义函数中指针
使用实例 148
8.3.5 数组作为参数 149
8.3.6 数组作为函数参数
实例 150
8.4 返回值 151
8.4.1 函数返回值的类型 151
8.4.2 函数返回指针 152
8.4.3 函数返回指针实例 153
8.4.4 函数返回结果到参数 154
8.5 库函数 154
8.5.1 库函数的种类 154
8.5.2 库函数包含文件 155
8.5.3 头文件使用实例 156
8.6 小结 156
8.7 小测试 156
第9章 字符与字符串处理 158
9.1 字符测试函数介绍 158
9.1.1 数字或字母测试
函数isalnum() 158
9.1.2 字母测试函数
isalpha() 159
9.1.3 可打印字符测试
函数isgraph() 160
9.1.4 大小写字母测试函数
islower()和isupper() 160
9.1.5 数字测试函数
isdigit() 161
9.1.6 符号测试函数
ispunct() 162
9.1.7 其他字符测试函数 163
9.2 字符测试函数综合实例 163
9.2.1 统计字符串中各类
字符的个数 163
9.2.2 判断电话号码与姓名
是否正确 165
9.3 字符串转换 167
9.3.1 C程序中的字符串 167
9.3.2 字符串转换成浮点型
函数atof() 167
9.3.3 字符串转换成整型
函数atoi() 168
9.3.4 字符串转换成长整型
函数atol() 169
9.3.5 将浮点型数转换成
字符串函数ecvt() 170
9.3.6 字母的大小写转换
函数tolower()和
toupper() 170
9.3.7 其他字符串转换
函数 171
9.4 字符串比较 172
9.4.1 字符串比较函数
bcmp() 172
9.4.2 字符串大小比较
函数memcmp() 173
9.4.3 忽略大小写比较字符串
函数strncasecmp() 174
9.5 字符串复制 175
9.5.1 字符串复制函数
bcopy() 175
9.5.2 字符串复制
函数memccpy() 175
9.5.3 字符串复制函数
strcpy() 176
9.5.4 字符串复制函数
strncpy() 177
9.6 字符串的清理与填充 177
9.6.1 字符串清理函数
bzero() 177
9.6.2 字符串填充函数
memset() 178
9.7 字符串查找 179
9.7.1 字符串查找函数index()
与rindex() 179
9.7.2 字符串查找函数
memchr() 180
9.7.3 字符串查找函数
strchr()与strrchr() 180
9.8 字符串的连接与分割 181
9.8.1 字符串连接函数
strcat() 181
9.8.2 字符串分割函数
strtok() 182
9.9 其他字符串函数 182
9.9.1 字符串长度函数
strlen() 183
9.9.2 允许出现字符查找
函数strspn() 183
9.9.3 不允许出现字符查找
函数strcspn() 184
9.10 小结 185
9.11 小测试 185
第10章 结构体 186
10.1 结构体操作 186
10.1.1 对结构体的理解 186
10.1.2 结构体的定义 186
10.1.3 结构体的访问 188
10.1.4 结构体数组 189
10.1.5 结构体使用实例 190
10.2 结构体与指针 191
10.2.1 结构体指针的定义 192
10.2.2 结构体指针的访问 192
10.2.3 结构体作为函数的
参数 193
10.2.4 结构体指针作为函数
的参数 195
10.2.5 结构体作为函数的
返回值 196
10.2.6 结构体指针作为函数
的返回值 197
10.3 小结 199
10.4 小测试 199
第11章 时间函数 200
11.1 常用的时间函数 200
11.1.1 返回时间函数 200
11.1.2 取当前时间函数 201
11.1.3 字符串格式时间
函数 203
11.1.4 另一种字符串格式
时间函数 203
11.1.5 取得当地时间函数 204
11.1.6 将时间转换成秒数
函数 205
11.1.7 取得当前时间函数 206
11.1.8 设置当前时间函数 207
11.2 时间函数使用实例 208
11.2.1 运行程序所需要的
时间 208
11.2.2 两次输入之间的时间
间隔 209
11.2.3 设置系统时间 210
11.3 小结 211
11.4 小测试 211
第12章 C语言的编程规范 212
12.1 命名规范 212
12.2 格式规范 214
12.3 函数规范 215
12.4 其他规范 216
第3篇 Linux系统编程
第13章 Shell编程 218
13.1 bash的使用 218
13.1.1 bash的内部命令与
外部命令 218
13.1.2 命令补齐功能 218
13.1.3 命令通配符 219
13.1.4 使用命令的历史
记录 219
13.1.5 命令别名 220
13.2 Shell程序的基本结构 220
13.3 局部变量 221
13.4 环境变量 221
13.4.1 查看环境变量 222
13.4.2 访问环境变量 222
13.4.3 定义环境变量 222
13.4.4 在系统配置文件中
定义环境变量 222
13.4.5 位置变量 223
13.5 Shell运算符 224
13.5.1 变量赋值 224
13.5.2 算术运算符 224
13.6 输入和输出 225
13.6.1 echo命令输出结果 226
13.6.2 read命令读取信息 227
13.6.3 文件重定向 228
13.7 引号的使用方法 229
13.7.1 双引号 229
13.7.2 单引号 230
13.7.3 反引号 230
13.7.4 反斜线 230
13.8 测试语句 230
13.8.1 文件状态测试 231
13.8.2 数值测试 231
13.8.3 字符串测试 232
13.8.4 逻辑测试 233
13.9 流程控制结构 233
13.9.1 if语句 233
13.9.2 if语句应用实例 234
13.9.3 for语句 236
13.9.4 for循环应用实例 236
13.9.5 until循环 238
13.10 Shell编程实例 238
13.10.1 程序功能 239
13.10.2 编写程序代码 239
13.11 小结 240
13.12 小测试 240
第14章 目录与文件 242
14.1 文件操作权限 242
14.2 错误处理与错误号 243
14.2.1 对错误定义的理解 243
14.2.2 用错误常数显示错误
信息 244
14.2.3 用错误号显示错误
信息 245
14.3 创建与删除目录 245
14.3.1 创建目录函数
mkdir() 246
14.3.2 删除目录函数
rmdir() 247
14.4 文件的创建与删除 248
14.4.1 创建文件函数
creat() 248
14.4.2 删除文件函数
remove() 249
14.4.3 建立临时文件
函数mkstemp() 251
14.5 文件的打开与关闭 252
14.5.1 打开文件函数
open() 252
14.5.2 文件打开方式的
设置 252
14.5.3 打开文件的权限 253
14.5.4 文件打开实例 253
14.5.5 关闭文件函数
close() 254
14.6 文件读写 256
14.6.1 写入文件函数
write() 256
14.6.2 读取文件函数read() 257
14.6.3 文件读写位置的
移动 258
14.6.4 将缓冲区数据写入
磁盘函数sync() 260
14.6.5 将缓冲区数据写入
磁盘函数fsync() 261
14.7 文件锁定 262
14.7.1 对文件锁定的理解 263
14.7.2 文件锁定函数flock() 263
14.8 文件的移动与复制 265
14.8.1 文件移动函数
rename() 265
14.8.2 rename()函数使用
实例 265
14.8.3 文件复制实例 266
14.9 小结 268
14.10 小测试 268
第4篇 Linux网络编程
第15章 网络编程 269
15.1 网络编程的基本概念 269
15.1.1 IP地址 269
15.1.2 端口 270
15.1.3 域名 270
15.1.4 TCP与UDP 270
15.2 套接字 271
15.2.1 什么是套接字 271
15.2.2 套接字相关的数据
类型 271
15.2.3 套接字类型 272
15.3 域名与IP地址 272
15.3.1 用域名取得主机的IP
地址 272
15.3.2 用IP地址返回域名 274
15.4 网络协议 275
15.4.1 由协议名称取得协议
数据 275
15.4.2 由协议编号取得协议
信息 276
15.4.3 取得系统支持的所有
协议 277
15.5 网络服务 278
15.5.1 取得系统支持的网络
服务 278
15.5.2 用名称取得系统支持
的服务 279
15.5.3 由端口取得服务
名称 281
15.6 网络IP地址的转换 282
15.6.1 将网络地址转换成长
整型数 282
15.6.2 将长整型IP地址转换
成网络地址 283
15.6.3 主机字符顺序与网络
字符顺序的转换 284
15.7 错误处理 285
15.7.1 herror()函数显示
错误 285
15.7.2 捕获错误编号 285
15.8 小结 286
15.9 小测试 286
第16章 无连接的套接字通信 287
16.1 socket套接字 287
16.1.1 建立socket 287
16.1.2 取得socket状态 289
16.1.3 设置socket状态 290
16.2 面向无连接的套接字通信 291
16.2.1 工作流程 292
16.2.2 信息发送函数
sendto() 292
16.2.3 信息接收函数
recvfrom() 293
16.3 无连接的套接字通信实例 294
16.3.1 无连接的套接字通信
客户端 294
16.3.2 无连接的套接字通信
服务器 295
16.3.3 测试UDP通信程序 297
16.4 小结 298
16.5 小测试 298
第17章 面向连接的套接字通信 299
17.1 面向连接的套接字通信工作
流程 299
17.2 绑定端口 299
17.2.1 绑定端口函数
bind() 299
17.2.2 使用bind()函数绑定
端口实例 301
17.3 监听与连接 302
17.3.1 等待监听函数
listen() 302
17.3.2 listen()函数使用
实例 303
17.3.3 接受连接函数
accept() 304
17.3.4 accept()函数使用
实例 304
17.3.5 请求连接函数
connect() 306
17.3.6 connect()函数使用
实例 307
17.4 数据的发送与接收 308
17.4.1 数据接收函数
recv() 308
17.4.2 recv()函数使用实例 309
17.4.3 数据发送函数
send() 310
17.4.4 数据传输函数
write()与read() 311
17.4.5 read()函数接收数据
实例 311
17.5 面向连接的套接字通信
实例 313
17.5.1 服务器程序 313
17.5.2 客户端程序 316
17.5.3 实例程序测试 317
17.6 小结 318
17.7 小测试 318
第5篇 Linux C项目实战
第18章 电话本项目的开发 319
18.1 程序功能分析 319
18.2 程序的函数 319
18.3 包含文件 320
18.4 数据的定义 320
18.5 菜单函数 321
18.6 显示电话信息函数 322
18.7 添加电话号码函数 322
18.8 按姓名查找函数 322
18.9 删除电话号码函数 323
18.10 保存到文件函数 324
18.11 从文件导入信息函数 324
18.12 主函数 325
18.13 程序的运行 326
18.14 小结 327