
本书以Fedora 14为平台,深入浅出、循序渐进的讲解了Linux操作系统下的C语言程序设计,并通过大量的程序实例,以及综合开发案例的演示,帮助读者快速掌握Linux下C语言编程的方法和技巧。 本书内容翔实,包括Linux系统简介、Shell编程、Linux C开发环境、Linux下常用C库函数、进程管理、线程管理、基于文件描述法的I/O操作、基于流的I/O操作、套接字编程、数据库编程、GTK+图形界面开发等等,并结合两个具体的项目案例,详细介绍了Linux平台下C程序开发的方法和技巧。
前 言 自Linux操作系统诞生以来,几乎每天,它都会以某种方式出现在我们的生活中,我们已经数不清有多少应用程序和有多少机构在使用Linux。在大中型服务器解决方案中,国内外无数大型企业都选择了Linux;在嵌入式开发领域,Linux的应用更是层出不穷;尤其是在当今快速发展的智能手持设备中,更是以源码开放的Linux内核作为平台。基于Linux平台的软件开发工程师的需求量也在不断增加。 作者根据自己多年来在Linux下进行C程序开发的经验与积累,并融合大量的程序实例而著成此书。本书由浅入深,适合各个水平阶段的读者学习。 本书特点 1.循序渐进,由浅入深 从Linux系统的安装、C语言编程基础、Linux下的基本编辑器、程序编译器和调试器,到Linux系统的各种函数调用,再到Linux下具体程序案例的设计开发,本书内容由浅入深,囊括了Linux下C程序开发的各个环节。 2.程序实例丰富,实践性强 在本书中,几乎每个知识点都会伴随一个或多个程序实例,通过实例来加深读者对知识点的理解和掌握。对于每个程序实例,作者都添加了十分详细的注释,方便读者理解;并且,所有的实例读者都可以在自己的实验环境中完整实现。尤其是通过最后两章实际项目案例的讲解,更是完整地向读者演示了Linux环境下项目实例的设计与开发。 3.技术全面,知识点阐述到位 网络编程和图形界面编程是C程序学习中比较深入的知识,也是本书中重点讲解的内容。在本书的最后3章,将这些知识点与实际的项目开发结合,通过逐步设计与实现,深化读者对它们的理解与掌握。将Linux系统开发技术、C语言开发技术、软件工程思想融会贯通,使本书成为一本思想和内容都极其丰富的计算机教程。 本书内容 第1章:介绍Linux系统的基本概念和安装方法、Linux下的常用命令,以及Shell的初步使用。这些是使用Linux的基础,帮助读者为本书后续的学习打下扎实的基础。 第2章:讲述Linux下的Shell编程方法。Shell作为Linux用户与内核之间交互的接口,除了是一个命令解释器外,本身也是一种功能强大的程序设计语言。掌握好Shell程序的基本语法,将会使我们在Linux下的程序开发事半功倍。 第3章:介绍Linux系统下的C开发环境,包括编辑器、程序编译器和程序调试器,它们是在Linux下进行C程序开发必备的工具,几乎所有Linux下的项目编程都会涉及它们。 第4章:详细讲解了Linux下的常用C库函数。灵活地使用库函数,将使我们的程序更加高效、简洁。 第5章:详细阐述了Linux下的进程管理。进程是操作系统中一个非常重要的概念,熟悉使用进程的操作和进程控制的相关系统调用,会使用户在使用Linux系统完成各种工作时更加得心应手。 第6章:详细阐述了Linux下的线程管理。线程是一个进程内的基本调度单位,是一种轻量级的进程,创建一个线程的开销比创建一个进程要小得多,而且线程上下文的切换开销也比进程要小得多。多线程编程已成为开发并发应用程序的主流方法。 第7章:讲解基于文件描述符的文件I/O操作,以及Linux中文件系统的概念。文件操作是Linux系统中最常见的操作之一,在Linux中,所有的内容都被看成文件,所有的操作都可以归结为对文件的操作。 第8章:讲述基于流的文件I/O操作。基于流的I/O操作是由标准C函数库提供的,与基于文件描述符的I/O操作相比,基于流的I/O更简单、方便。在大多数情况下,程序员更愿意使用基于流的输入/输出方法。 第9章:详细讲述了Linux套接字编程的原理与方法,通过大量的程序实例演示了Socket编程中常用API的使用方法。 第10章:详细讲述了Linux下MySQL数据库编程的原理与方法,通过大量的程序实例演示了MySQL数据库编程中常用API的使用方法。 第11章:讲述GTK+图形界面编程。GTK+是Linux下基于C的图形界面开发库,本章通过程序实例演示了使用GTK+库创建各种界面控件的方法。 第12章:通过设计一款Linux下的小游戏——俄罗斯方块,演示了小型项目工程软件的模块划分方法,以及Linux下的C程序开发步骤,使读者能够更深层次地掌握GTK+图形界面编程。 第13章:通过设计Linux下的学生信息管理系统,再次详细阐述了Linux下C程序的开发,读者从中能够掌握GTK+图形界面开发和MySQL数据库编程的方法与技巧。 本书适合的读者 Linux及C程序设计初学者; 大、中专院校计算机及相关专业的学生; 高校计算机及相关专业本科生、研究生; Linux软件开发从业人员; 开源软件开发爱好者; 社会培训学生。 本书由叶茂、张繁编著。在本书完成之际,感谢我的家人、朋友在我最困难的时候带给我快乐与动力,支持我一直坚持下来,并最终完成这部著作。 参加本书编写和审定的还有王坚宁、李龙、魏勇、张玉兰、高克臻、张秀梅、张云霞、周兴国、李辉、刘峰、徐浩、李建国、马建军、唐爱华、朱丽云、马淑娟、张浩、张乐、许小荣、王云。在此,对以上人员致以诚挚的谢意! 由于时间仓促,加之水平有限,书中的缺点和不足之处在所难免,敬请读者批评指正。 编著者 2014年1月
目 录 第1章 Linux初识 1 1.1 了解Linux 1 1.1.1 什么是Linux 1 1.1.2 GNU与Linux 2 1.1.3 Linux系统的特点 3 1.1.4 Linux的内核版本与发行版本 3 1.1.5 本书使用的Linux 4 1.2 安装Linux 4 1.2.1 系统安装前的准备工作 5 1.2.2 从光盘安装Linux 5 1.2.3 从硬盘安装Linux 22 1.2.4 在虚拟机下安装Linux 23 1.3 Linux常用命令 28 1.3.1 Shell终端 28 1.3.2 与目录相关的命令 29 1.3.3 与文件相关的命令 29 1.3.4 与网络服务相关的命令 31 1.4 本章小结 31 上机题 32 第2章 Shell编程 33 2.1 Shell简介 33 2.1.1 关于Shell 33 2.1.2 Shell的使用 34 2.1.3 常见Shell的种类 36 2.2 Shell基本语法 38 2.2.1 变量 38 2.2.2 通配符 43 2.2.3 引号 44 2.2.4 注释符 46 2.3 选择结构 46 2.3.1 test命令 46 2.3.2 if语句 49 2.3.3 if...else语句 49 2.3.4 if...elif语句 50 2.3.5 case语句 52 2.4 循环结构 54 2.4.1 for语句 54 2.4.2 while语句 56 2.4.3 until语句 58 2.4.4 异常退出循环 58 2.5 函数 61 2.5.1 定义函数 61 2.5.2 交互式Shell中定义和使用函数 62 2.5.3 Shell脚本中定义和使用函数 62 2.5.4 将函数定义在单独的文件中 64 2.6 本章小结 65 上机题 65 第3章 Linux C开发环境 67 3.1 C编辑器 67 3.1.1 vi 67 3.1.2 gedit 72 3.1.3 KWrite 74 3.1.4 Kate 75 3.2 程序编译器gcc 78 3.2.1 gcc简介 78 3.2.2 gcc编译初步 79 3.2.3 警告提示功能 81 3.2.4 优化gcc 82 3.2.5 连接库 86 3.2.6 调试选项 87 3.3 程序调试器gdb 88 3.3.1 gdb简介 88 3.3.2 gdb调试初步 90 3.3.3 使用断点 92 3.3.4 查看运行时数据 97 3.3.5 查看源程序 103 3.3.6 改变程序的执行 105 3.4 本章小结 109 上机题 110 第4章 Linux下常用C库函数 112 4.1 使用库函数的优势 112 4.2 内存操作相关 114 4.2.1 malloc函数 115 4.2.2 calloc函数 115 4.2.3 free函数 117 4.2.4 memset函数 118 4.2.5 memcpy函数 123 4.2.6 memmove函数 125 4.3 数字与字符串间的转换 126 4.3.1 字符串转换为整型 126 4.3.2 字符串转换为实型 129 4.3.3 整型转换为字符串 130 4.3.4 实型转换为字符串 132 4.4 日期与时间 135 4.5 随机函数 138 4.6 本章小结 142 上机题 143 第5章 进程管理 144 5.1 进程概述 144 5.1.1 Linux进程简介 144 5.1.2 task_struct结构 146 5.2 进程管理 150 5.2.1 获得进程ID 151 5.2.2 创建进程 152 5.2.3 进程执行 159 5.2.4 进程消亡 163 5.2.5 进程等待 167 5.2.6 system函数 173 5.2.7 进程组与会话 175 5.3 进程调度机制 177 5.4 本章小结 180 上机题 180 第6章 线程管理 182 6.1 线程概述 182 6.2 线程的基本操作 183 6.2.1 创建线程 183 6.2.2 线程等待 186 6.2.3 线程终止 187 6.2.4 线程属性 189 6.3 线程同步 193 6.3.1 互斥锁 193 6.3.2 条件变量 198 6.3.3 信号量 203 6.4 本章小结 207 上机题 208 第7章 基于文件描述符的I/O操作 209 7.1 Linux文件系统 209 7.1.1 文件系统结构 209 7.1.2 文件类型 210 7.1.3 文件访问权限 213 7.1.4 数据结构 214 7.2 文件I/O操作 216 7.2.1 文件的创建、打开与关闭 217 7.2.2 文件的定位 221 7.2.3 文件的读/写 224 7.3 文件属性操作 228 7.3.1 改变文件访问权限 228 7.3.2 改变文件所有者 229 7.3.3 重命名 230 7.4 文件的其他操作 233 7.4.1 stat()、fstat()和lstat()函数 233 7.4.2 dup()和dup2()函数 235 7.4.3 fcntl()函数 236 7.4.4 sync()和fsync()函数 236 7.5 特殊文件的操作 237 7.5.1 目录文件 237 7.5.2 链接文件 241 7.5.3 管道文件 244 7.5.4 设备文件 246 7.6 本章小结 246 上机题 246 第8章 基于流的I/O操作 248 8.1 流与缓存 248 8.1.1 流和FILE对象 248 8.1.2 缓存 250 8.1.3 设置缓存 251 8.2 流的打开与关闭 255 8.2.1 流的打开 255 8.2.2 流的关闭 257 8.2.3 注意fclose 259 8.3 流I/O操作 260 8.3.1 字符I/O 260 8.3.2 行I/O 264 8.3.3 直接I/O 267 8.3.4 格式化I/O 270 8.4 本章小结 273 上机题 273 第9章 套接字编程 274 9.1 套接字编程基础 274 9.1.1 套接字概述 274 9.1.2 套接字数据结构 276 9.1.3 基础函数 279 9.2 TCP套接字编程 285 9.2.1 TCP套接字原理 285 9.2.2 TCP套接字函数 286 9.2.3 TCP套接字Client/Server程序实例 299 9.3 UDP套接字编程 304 9.3.1 UDP套接字原理 304 9.3.2 UDP数据发送与接收 305 9.3.3 UDP套接字Client/Server程序实例 305 9.4 多客户模型 309 9.4.1 循环服务器 309 9.4.2 并发服务器 310 9.4.3 多路复用I/O 311 9.5 本章小结 319 上机题 320 第10章 Linux数据库编程 321 10.1 Linux数据库简介 321 10.1.1 数据库的基本概念 321 10.1.2 关系型数据库 322 10.1.3 Linux下的常用数据库 324 10.2 MySQL的使用 326 10.2.1 安装MySQL 326 10.2.2 MySQL的常用操作 331 10.3 数据库编程 334 10.3.1 数据结构 334 10.3.2 函数API 338 10.3.3 一个简易的员工信息管理系统 353 10.4 本章小结 358 上机题 358 第11章 GTK+图形界面开发 359 11.1 Linux图形界面开发简介 359 11.1.1 Linux图形界面环境 359 11.1.2 GTK+简介 360 11.2 基本控件 363 11.2.1 窗口 363 11.2.2 标签 368 11.2.3 按钮 369 11.2.4 文本框 371 11.3 布局控件 378 11.3.1 表格 378 11.3.2 框 382 11.3.3 窗格 383 11.4 其他高级控件 385 11.4.1 进度条、微调按钮、组合框 385 11.4.2 单选按钮、复选按钮 390 11.4.3 下拉菜单 392 11.5 GTK+信号与事件 394 11.6 本章小结 398 上机题 398 第12章 设计一款Linux下的小游戏 400 12.1 游戏简介 400 12.2 程序模块划分 403 12.2.1 初始化模块 403 12.2.2 对话框显示模块 405 12.2.3 游戏主模块 408 12.3 游戏效果演示 426 12.4 本章小结 427 第13章 设计Linux下的学生信息管理系统 428 13.1 软件功能简介 428 13.2 程序模块划分 429 13.2.1 数据库设计 429 13.2.2 用户登录 436 13.2.3 学生查询界面 441 13.2.4 教师查询界面 443 13.2.5 管理员查询界面 445 13.2.6 Makefile文件 448 13.3 软件运行效果演示 448 13.4 本章小结 452