
本书结合大量实例,由浅入深、循序渐进地介绍了Linux平台 C程序开发技术。本书涉及面广,从基本操作到高级技术,再到实际应用,几乎涉及Linux C开发的所有重要知识点。本书讲解详细,示例丰富,每个知识点都配有具体的示例讲解,读者可以轻松上手。本书特意提供了典型习题及教学PPT以方便教学。另外,配书光盘中提供了大量的配套教学视频及源代码,便于读者更加高效的学习。
全书共分3篇。第1篇介绍C语言的基础知识和一些Linux编程的相关工具,内容包括C语言基础、指针、函数、文本编辑器、GCC编译器,以及调试工具使用技术;第2篇介绍Linux C应用技术,内容包括文件系统编程、标准输入输出、进程编程、网络编程,以及GUI编程等相关应用技术;第3篇介绍了面向实际应用的客户端/服务器端程序案例,以让读者学以致用。
本书适合所有想从事Linux C开发的人员阅读,也可作为大中专院校及职业院校相关课程的教材。另外,本书也可供Linux平台的程序员和编程爱好者作为实际工作中的参考书籍。
Linux操作系统是一款广泛应用的操作系统。Linux借助其免费、开源等特点,在服务器、安全行业等特殊领域受到了广泛应用。现在,Linux的各种衍生操作系统更是深入手机等嵌入式设备领域。由于Linux操作系统是使用C语言开发和实现的,所以Linux最为有效的开发方式是采用C语言开发。
虽然Linux下采用标准的C语言,但对于普通C语言爱好者来说,要熟练掌握Linux C编程仍然困难重重。因为读者在完全陌生的战场(操作系统),使用完全陌生的武器(开发工具),和完全陌生的敌人(技术)作战。首先,Linux操作系统与Windows操作系统不同,造成用户连基本的文件操作都无法顺利进行。其次,Linux下没有Visual C++等常见的Windows开发工具,取而代之的是完全陌生的GCC、VI等工具。最后,Linux下开发会遇到操作系统层面的相关技术。这些技术同样是完全陌生的。基于以上原因,本人编写了本书,力求帮助读者克服这些困难,从而顺利学习Linux C编程。
本书由浅入深,全面系统地讲解了Linux C编程技术,篇章结构划分合理,可以帮助读者建立完善的Linux C编程技术体系。同时,针对Linux C编程技术新的应用趋势,着重讲解了最新应用所使用的技术。考虑到新手入门的特点,本书有针对性地加强了示例的数量,帮助读者尽可能地掌握好每项技术。同时,为了方便读者更加高效而直观的学习,本书专门提供了配套多媒体教学视频辅助读者学习。相信通过阅读本书,读者可以顺利进入Linux C编程的世界。
本书有何特色
1.配多媒体教学视频
本书提供配套的多媒体教学视频辅助教学。视频涵盖本书各个知识点,从而帮助读者高效、直观地掌握各项技术。
2.门槛低,容易入门
本书站在初学者的角度,尽量避免过多的专业术语,避免云山雾罩的讲解,以通俗易懂的语言,让学习的难度大幅降低。即便零基础的读者,只要跟着本书的讲解一步步学下去,也能掌握书中所讲解的内容。
3.内容全面、系统
本书详细介绍了Linux C编程所需要的知识,包括语法、函数,以及文本编辑器、GCC编译器和调试工具等,通过学习这些技术,读者就可以轻松地开发应用程序。
4.讲解由浅入深,循序渐进
本书的编排采用循序渐进的方式,内容梯度从易到难,讲解由浅入深,适合各个层次的读者阅读,并均有所获。
5.写作细致,处处为读者着想
本书内容编排、概念表述、语法讲解、示例讲解、源代码注释等都很细致,作者讲解时不厌其烦,细致入微,将问题讲解得很清楚,扫清了读者的学习障碍。
6.贯穿大量的开发实例和技巧
本书在讲解知识点时贯穿了大量短小精悍的典型实例,力求让读者获得真正实用的 知识。
7.提供教学PPT,方便老师教学
本书适合大中专院校和职业学校作为职业技能课程的教学用书,所以专门制作了教学PPT,以方便各院校的老师教学时使用。
本书内容安排
第1篇 基础篇(第1~7章)
本篇主要内容包括Linux简介、C语言基础、指针、函数及文本编辑器和GCC编译器等相关工具的介绍。本篇主要是让读者了解Linux C编程的应用领域、Linux C的基础语法知识及相关工具。本篇是Linux C编程的基础,只有完全掌握了本篇的内容,才可以在后面的学习中游刃有余。
第2篇 应用篇(第8~14章)
本篇主要内容包括文件系统编程、标准输入输出、进程编程、线程编程、网络编程及GUI编程等。本篇是GUI的进阶部分,主要介绍了Linux C开发中相关技术的编程实现。学习本篇后读者可以使用Linux C实现一些简单的应用程序。
第3篇 案例篇(第15章)
本篇主要介绍了客户端/服务器端程序案例。本篇介绍的是Linux C开发的实际应用,读者学习完本篇的知识,可以搭建起一个简易的客户端/服务器系统。
本书光盘内容
* 本书重点内容的配套教学视频;
* 本书实例涉及的源代码及可执行文件。
本书读者对象
* Linux C开发入门人员;
* Linux C编程爱好者;
* Linux C编程从业人员;
* Linux C编程培训学员;
* 大中专院校的学生。
本书阅读建议
* 建议基础薄弱的读者,从前至后顺次阅读,尽量不要跳跃。
* 书中的实例和示例建议读者都要亲自上机动手实践,学习效果更好。
* 课后习题都动手做一做,以检查自己对本章内容的掌握程度,如果不能顺利完成,建议回过头来重新学习一下本章内容。
* 学习每章内容时,建议读者先仔细阅读书中的讲解,然后再结合本章教学视频学习,学习效果更佳。
* 第3篇的内容偏重于实战。这本书内容在初期不需要掌握,只要理解思想即可。
本书作者
本书由陈冠军主笔编写。其他参与编写的人员有毕梦飞、蔡成立、陈涛、陈晓莉、陈燕、崔栋栋、冯国良、高岱明、黄成、黄会、纪奎秀、江莹、靳华、李凌、李胜君、李雅娟、刘大林、刘惠萍、刘水珍、马月桂、闵智和、秦兰、汪文君、文龙。
阅读本书的过程中,若有任何疑问,可以发邮件到book@wanjuanchina.net或bookservice2008@163.com,或者到www.wanjuanchina.net的图书论坛上留言,以获得帮助。
第1篇 基 础 篇
第1章 Linux简介以及Shell编程基础( 教学视频:140分钟) 2
1.1 Linux系统概述 2
1.1.1 Linux发展简史 2
1.1.2 Linux系统组成 3
1.1.3 使用Linux的优势 4
1.1.4 Linux的应用领域 4
1.1.5 Linux发行版的种类 5
1.2 图形化界面操作 5
1.2.1 系统登录、注销与关闭系统 6
1.2.2 系统管理 6
1.2.3 操作文件与 7
1.3 命令行界面操作 8
1.3.1 系统登录与退出 8
1.3.2 操作文件与 9
1.3.3 压缩与解压缩文件 20
1.3.4 常用网络操作 22
1.3.5 用户管理和操作 24
1.3.6 系统管理常见操作 25
1.4 Shell脚本编程基础 30
1.4.1 创建Shell脚本 30
1.4.2 Shell中的特殊字符 31
1.4.3 使用Shell变量 32
1.4.4 条件测试 34
1.4.5 Shell中的结构控制语句 35
1.4.6 定义Shell函数 40
1.5 小结 41
1.6 本章习题 41
第2章 C语言基础( 教学视频:90分钟) 42
2.1 C语言概述 42
2.1.1 C语言的四大特点 42
2.1.2 程序的基本结构 42
2.1.3 程序的开发流程 43
2.2 C语言数据处理 44
2.2.1 数据的表达方式——数据类型 44
2.2.2 常用运算符 46
2.2.3 程序的基础——表达式 48
2.3 语句类型 49
2.3.1 表达式语句 49
2.3.2 选择语句if/switch 49
2.3.3 循环语句for/while/do...while 52
2.3.4 跳转语句goto/continue/break 55
2.3.5 复合语句和空语句 57
2.4 数据的集合--数组 57
2.4.1 使用一维数组 58
2.4.2 使用二维数组和多维数组 59
2.4.3 字符数组和字符串 61
2.5 C语言的预处理 62
2.5.1 宏定义define 62
2.5.2 文件包含include 64
2.5.3 条件编译 65
2.6 小结 66
2.7 本章习题 67
第3章 深入C语言( 教学视频:89分钟) 68
3.1 保存地址值的变量--指针 68
3.1.1 使用指针 68
3.1.2 指针和数组的互换 72
3.1.3 指针的集合——指针数组 74
3.2 函数 76
3.2.1 定义与声明函数 76
3.2.2 调用函数与参数传递 77
3.2.3 变量在函数中的作用域 78
3.2.4 变量的存储类型 80
3.2.5 外部函数和内部函数 82
3.2.6 函数的递归 83
3.2.7 使用函数指针 85
3.3 结构体、共用体和枚举 86
3.3.1 不同类型数据的集合——结构体 86
3.3.2 共用同一内存的数据集合——共用体 91
3.3.3 罗列数据的集合——枚举 92
3.4 小结 94
3.5 本章习题 94
第4章 文本编辑器( 教学视频:80分钟) 95
4.1 使用VI编辑器 95
4.1.1 启动VI 95
4.1.2 切换VI的工作模式 96
4.1.3 保存文件和退出 98
4.1.4 移动光标 99
4.1.5 滚动屏幕 101
4.1.6 输入、删除与修改文本 103
4.1.7 复制与粘贴文本 106
4.1.8 查找与替换文本 108
4.1.9 其他功能 111
4.2 VI高效编辑程序技巧 112
4.2.1 在程序中跳转 112
4.2.2 补全关键字 113
4.2.3 缩进源代码 113
4.3 使用Emacs编辑器 115
4.3.1 启动/退出Emacs 115
4.3.2 打开与保存文件 116
4.3.3 移动光标与滚动屏幕 117
4.3.4 编辑文本 118
4.3.5 查找与替换文本 118
4.3.6 切分窗口 119
4.3.7 使用帮助功能 120
4.4 小结 120
4.5 本章习题 120
第5章 使用GCC编译器( 教学视频:46分钟) 122
5.1 安装GCC 122
5.2 GCC常用选项 122
5.2.1 编译程序 122
5.2.2 设置警告信息 125
5.2.3 设置优化级别 128
5.2.4 设置连接器 129
5.2.5 其他功能选项 132
5.3 小结 133
5.4 本章习题 133
第6章 调试工具( 教学视频:54分钟) 134
6.1 安装GDB 134
6.2 使用GDB 134
6.2.1 启动/退出GDB 134
6.2.2 载入程序 135
6.2.3 列出源代码 135
6.2.4 执行程序 136
6.2.5 使用帮助功能 137
6.3 设置断点与管理断点 138
6.3.1 设置断点 138
6.3.2 查看断点信息 139
6.3.3 删除断点 139
6.3.4 删除指定行上的断点 140
6.3.5 禁用指定的断点 140
6.3.6 设置观察点 140
6.4 显示数据与修改变量值 141
6.4.1 准备示例程序 141
6.4.2 显示变量或表达式的值 142
6.4.3 自动显示变量或表达式的值 143
6.4.4 查看变量的数据类型 144
6.4.5 修改变量的值 144
6.5 执行命令和调用函数 145
6.5.1 单步执行 145
6.5.2 退出被调用的函数 145
6.5.3 执行到指定行 146
6.5.4 跳转执行 146
6.5.5 强制调用函数 147
6.6 其他常用操作 147
6.6.1 查看堆栈信息 147
6.6.2 查看源程序信息 148
6.6.3 查看寄存器 148
6.6.4 查看程序的汇编代码 148
6.7 小结 149
6.8 本章习题 149
第7章 Linux C基本应用( 教学视频:75分钟) 151
7.1 字符串的操作 151
7.1.1 字符判断 151
7.1.2 初始化字符串 153
7.1.3 复制字符串 153
7.1.4 比较字符串 155
7.1.5 查找字符/字符串 157
7.1.6 连接与分割字符串 158
7.2 数据转换 160
7.2.1 字母大小写转换 160
7.2.2 转换字符串 161
7.3 分配与释放内存 163
7.3.1 分配内存 163
7.3.2 释放内存 164
7.3.3 更改已分配内存的大小 165
7.4 时间和日期 165
7.4.1 获取时间和日期 165
7.4.2 时间和日期的格式转换 167
7.4.3 计算时间差 169
7.5 其他应用 169
7.5.1 命令行参数分析 170
7.5.2 获取用户和用户组信息 172
7.5.3 环境变量操作 175
7.6 小结 177
7.7 本章习题 177
第2篇 应 用 篇
第8章 文件系统编程( 教学视频:52分钟) 180
8.1 Linux文件系统简介 180
8.2 使用文件 180
8.2.1 创建或打开文件 180
8.2.2 关闭文件 184
8.2.3 读写文件 184
8.2.4 其他文件操作函数 188
8.3 文件属性操作 190
8.3.1 获取文件属性 190
8.3.2 设置文件属性 194
8.4 操作 195
8.4.1 创建文件 196
8.4.2 打开和关闭 197
8.4.3 读取 197
8.4.4 获取和更改当前工作 198
8.5 小结 199
8.6 本章习题 199
第9章 标准输入输出( 教学视频:45分钟) 201
9.1 标准输入输出的基本操作 201
9.1.1 打开文件 201
9.1.2 关闭文件 202
9.1.3 清空缓冲区 202
9.1.4 设置缓冲区属性 203
9.2 非格式化输入输出 203
9.2.1 单字节输入输出 204
9.2.2 字符串输入输出 207
9.2.3 数据块输入输出 209
9.3 格式化输入输出 212
9.4 小结 217
9.5 本章习题 217
第10章 进程操作( 教学视频:69分钟) 219
10.1 进程的概念 219
10.1.1 进程的组成 219
10.1.2 进程的状态 220
10.2 Linux进程信息的组成 221
10.2.1 Linux进程的状态 221
10.2.2 进程调度信息 222
10.2.3 进程的标识符 222
10.2.4 进程间通信 223
10.2.5 进程链接信息 223
10.2.6 进程的时间和定时器信息 223
10.2.7 进程的文件系统信息 224
10.2.8 进程的其他信息 224
10.3 Linux C之进程控制 225
10.3.1 使用system()函数创建进程 225
10.3.2 使用管道创建新进程 226
10.3.3 获取进程信息 227
10.3.4 使用fork()函数复制进程 229
10.3.5 使用vfork()和exec()函数创建进程 233
10.3.6 终止进程 236
10.4 守护进程 238
10.4.1 创建守护进程 238
10.4.2 守护进程的输出 241
10.5 小结 243
10.6 本章习题 243
第11章 进程间通信( 教学视频:82分钟) 244
11.1 管道 244
11.1.1 管道如何工作 244
11.1.2 使用匿名管道 244
11.1.3 使用命名管道 248
11.2 信号 252
11.2.1 信号如何工作 252
11.2.2 信号的类型 253
11.2.3 处理信号 254
11.2.4 发送信号 257
11.2.5 使用信号集 261
11.3 消息队列 262
11.3.1 创建或打开消息队列 262
11.3.2 控制消息队列 264
11.3.3 读/写消息队列 265
11.4 信号量 269
11.4.1 创建或打开信号量集 269
11.4.2 控制信号量 270
11.4.3 操作信号量 271
11.5 共享内存 273
11.5.1 创建或打开共享内存 273
11.5.2 读/写共享内存 275
11.6 小结 277
11.7 本章习题 277
第12章 多线程编程( 教学视频:40分钟) 279
12.1 什么是线程 279
12.2 线程的基本操作 280
12.2.1 创建线程 280
12.2.2 合并线程 281
12.2.3 终止线程 282
12.2.4 线程属性 287
12.3 线程的同步 290
12.3.1 使用互斥量 290
12.3.2 使用条件变量 292
12.3.3 使用信号量 295
12.4 小结 297
12.5 本章习题 297
第13章 网络编程( 教学视频:56分钟) 299
13.1 计算机网络基础知识 299
13.1.1 什么是OSI参考模型 299
13.1.2 什么是TCP/IP协议栈 300
13.2 套接字编程基础 301
13.2.1 套接字编程原理 301
13.2.2 创建套接字 302
13.2.3 绑定套接字 303
13.2.4 监听网络端口 304
13.2.5 接收连接请求 305
13.2.6 建立连接 305
13.2.7 面向连接的数据传输 305
13.2.8 面向无连接的数据传输 306
13.2.9 关闭套接字 306
13.3 数据流套接字实例 307
13.3.1 构建服务器端 307
13.3.2 构建客户端 308
13.3.3 调试程序 310
13.4 数据报套接字实例 310
13.4.1 构建服务器端 310
13.4.2 构建客户端 311
13.4.3 调试程序 312
13.5 服务器模型 313
13.5.1 循环服务器 313
13.5.2 并发服务器 314
13.5.3 多路复用I/O并发服务器 316
13.6 域名系统 318
13.6.1 通过域名获取主机信息 318
13.6.2 通过地址获取主机信息 319
13.6.3 获取本地主机信息 320
13.7 小结 320
13.8 本章习题 320
第14章 Linux GUI编程( 教学视频:68分钟) 321
14.1 GTK+/Gnome开发简介 321
14.1.1 第一个GTK+应用程序 321
14.1.2 信号连接回调函数 323
14.2 常用GTK+构件 325
14.2.1 使用容器构件 325
14.2.2 使用按钮构件 329
14.2.3 使用标签构件 332
14.2.4 使用文本及文本输入构件 333
14.2.5 使用进度条构件 337
14.2.6 使用组合框 340
14.2.7 使用对话框 343
14.3 GUI生成器Glade 348
14.3.1 Glade软件界面 348
14.3.2 创建应用程序界面 349
14.3.3 C语言代码联编 350
14.4 小结 352
14.5 本章习题 352
第3篇 案 例 篇
第15章 客户端/服务器端程序( 教学视频:15分钟) 354
15.1 服务器端程序设计 354
15.2 客户端程序设计 358
15.2.1 字符界面客户端程序 358
15.2.2 图形界面客户端程序 360
15.3 小结 363