《精通Linux C编程》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:程国钢编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2015
  • ISBN:9787302393672
  • 页数:563 页
图书介绍:本书共16章,前11章介绍了Linux C编程的各种技术,主要包括:Linux基础知识介绍,Linux下的C语言编译器、调试器和程序维护工具的使用方法,C语言基础,Linux下通过C语言进行文件操作和目录操作的方法,标准I/O库函数,进程概念、进程操作以及进程间通信的方法,线程操作,用C语言进行网络编程、数据库编程以及GUI编程的方法等,最后5章通过5个典型的综合案例为读者演示了Linux下的C编程技术和方法。

第Ⅰ部分 基础篇 3

第1章 Linux系统概述 3

1.1 什么是Linux 4

1.2 Linux系统特点及主要功能 5

1.2.1 Linux系统特点 5

1.2.2 Linux系统的主要功能 6

1.3 Linux的内核版本和发行版本 7

1.4 系统的安装 8

1.4.1 系统安装前的准备工作 8

1.4.2 安装Linux 9

1.4.3 使用虚拟机 13

1.5 Shell的使用 16

1.5.1 Shell简介 16

1.5.2 常见Shell的种类 17

1.5.3 Shell的简单使用 18

1.5.4 通配符 19

1.5.5 引号 20

1.5.6 注释符 21

1.6 Linux常用命令 22

1.6.1 与目录相关的命令 22

1.6.2 与文件相关的命令 22

1.6.3 与网络服务相关的命令 23

1.7 本章小结 24

实战演练 24

第2章 C语言编程基础 25

2.1 C语言的历史背景 26

2.2 C语言的特点 26

2.3 C语言的基本数据类型 27

2.3.1 整型 27

2.3.2 实型 28

2.3.3 字符型 29

2.4 运算符与表达式 31

2.4.1 算术运算符与算术表达式 31

2.4.2 赋值运算符与赋值表达式 32

2.4.3 逗号运算符与逗号表达式 33

2.5 C程序的3种基本结构 33

2.5.1 顺序结构 34

2.5.2 选择结构 35

2.5.3 循环结构 38

2.6 C语言中的数据输入与输出 40

2.6.1 字符输出函数putchar 41

2.6.2 字符输入函数getchar 41

2.6.3 格式输出函数printf 41

2.6.4 格式输入函数scanf 43

2.7 函数 44

2.7.1 函数的定义 44

2.7.2 函数的调用 44

2.7.3 变量的存储类别 46

2.8 数组 49

2.8.1 一维数组的定义和使用 50

2.8.2 二维数组的定义和使用 51

2.8.3 字符数组和字符串 52

2.8.4 常用字符串处理函数 53

2.9 指针 56

2.9.1 地址和指针 57

2.9.2 指针的定义和使用 57

2.9.3 数组与指针 58

2.9.4 字符串与指针 59

2.9.5 指向函数的指针 60

2.10 结构体和共用体 60

2.10.1 定义和引用结构体 60

2.10.2 结构体数组 61

2.10.3 指向结构体的指针 62

2.10.4 共用体 63

2.10.5 使用typedef定义类型 64

2.11 链表 65

2.11.1 链表概述 65

2.11.2 建立动态单向链表 66

2.11.3 单向链表的输出 67

2.11.4 对单向链表的删除操作 68

2.11.5 对单向链表的插入操作 69

2.11.6 循环链表 69

2.11.7 双向链表 70

2.12 位运算符和位运算 71

2.12.1 “按位与”运算符(&) 71

2.12.2 “按位或”运算符(|) 71

2.12.3 “取反”运算符(~) 72

2.12.4 “异或”运算符(^) 72

2.12.5 移位运算符(〈〈和〉〉) 72

2.12.6 位域 72

2.13 C语言预处理命令 73

2.13.1 宏定义 73

2.13.2 文件包含 75

2.13.3 条件编译 75

2.13.4 #error等其他常用预处理命令 76

2.14 本章小结 77

实战演练 77

第3章 vim与Emacs编辑器 79

3.1 vim的使用 80

3.2 vim使用实例 85

3.3 Emacs的使用 87

3.3.1 启动与退出Emacs 87

3.3.2 Emacs下的基本操作 88

3.4 Emacs使用实例 93

3.5 本章小结 94

实战演练 94

第4章 gcc编译器与gdb调试器 97

4.1 gcc编译器简介 98

4.2 如何使用gcc 99

4.2.1 安装和配置gcc 99

4.2.2 gcc编译初步 100

4.2.3 警告提示功能 102

4.2.4 优化gcc 104

4.2.5 链接库 107

4.2.6 同时编译多个源程序 108

4.2.7 管道 108

4.2.8 调试选项 109

4.3 gdb调试器 110

4.3.1 gdb简介 110

4.3.2 gdb常用命令 111

4.3.3 gdb调试初步 112

4.4 gdb的使用详解 114

4.4.1 调用gdb 115

4.4.2 使用断点 115

4.4.3 查看运行时数据 117

4.4.4 查看源程序 122

4.4.5 改变程序的执行 124

4.5 xxgdb调试器简介 127

4.6 本章小结 128

实战演练 128

第5章 make的使用和Makefile的编写 131

5.1 什么是make 132

5.1.1 make机制概述 132

5.1.2 make与Makefile的关系 134

5.2 Makefile的书写规则 137

5.2.1 Makefile的基本语法规则 138

5.2.2 在规则中使用通配符 139

5.2.3 伪目标 140

5.2.4 多目标 141

5.2.5 自动生成依赖性 141

5.3 Makefile的命令 143

5.4 变量 144

5.4.1 变量的基础 144

5.4.2 赋值变量 145

5.4.3 define关键字 146

5.4.4 override指示符 147

5.4.5 目标变量和模式变量 147

5.5 常用函数调用 149

5.5.1 字符串处理函数 149

5.5.2 文件名操作函数 153

5.5.3 循环函数 155

5.5.4 条件判断函数 156

5.5.5 其他常用函数 157

5.6 隐式规则 159

5.6.1 隐式规则举例 159

5.6.2 隐式规则中的变量 160

5.6.3 使用模式规则 162

5.7 本章小结 164

实战演练 164

第Ⅱ部分 提高篇 169

第6章 文件I/O操作 169

6.1 软件编程体系简介 170

6.1.1 Linux的文件系统结构 170

6.1.2 文件类型 171

6.1.3 文件访问权限 174

6.2 基于文件描述符的I/O操作 174

6.2.1 文件描述符 175

6.2.2 标准输入、标准输出和标准出错 175

6.2.3 文件重定向 175

6.2.4 文件的创建、打开与关闭 177

6.2.5 文件的定位 181

6.2.6 文件的读写 183

6.3 文件的属性操作 187

6.3.1 改变文件访问权限 187

6.3.2 改变文件所有者 189

6.3.3 重命名 189

6.3.4 修改文件长度 190

6.4 文件的其他操作 190

6.4.1 stat、fstat和lstat函数 190

6.4.2 dup和dup2函数 192

6.4.3 fcntl函数 192

6.4.4 sync和fsync函数 193

6.5 特殊文件的操作 194

6.5.1 目录文件的操作 194

6.5.2 链接文件的操作 197

6.5.3 管道文件的操作 200

6.5.4 设备文件 200

6.6 本章小结 200

实战演练 201

第7章 基于流的I/O操作 203

7.1 流与缓存 204

7.1.1 流和FILE对象 204

7.1.2 标准输入、标准输出和标准出错 204

7.1.3 缓存 204

7.1.4 对缓存的操作 207

7.2 流的打开与关闭 209

7.2.1 流的打开 210

7.2.2 流的关闭 211

7.2.3 流关闭前的工作 213

7.3 流的读写 214

7.3.1 基于字符的I/O 214

7.3.2 基于行的I/O 217

7.3.3 直接I/O 219

7.3.4 格式化I/O 222

7.4 本章小结 224

实战演练 224

第8章 进程控制 227

8.1 进程的基本概念 228

8.1.1 Linux进程简介 228

8.1.2 进程与作业 229

8.1.3 进程标识 229

8.2 进程控制的相关函数 231

8.2.1 fork和vfork函数 231

8.2.2 exec函数 236

8.2.3 exit和exit函数 242

8.2.4 wait和waitpid函数 245

8.2.5 进程的一生 251

8.2.6 用户ID和组ID 251

8.2.7 system函数 253

8.3 多个进程间的关系 255

8.3.1 进程组 255

8.3.2 会话期 256

8.3.3 控制终端 258

8.4 本章小结 259

实战演练 259

第9章 信号 261

9.1 Linux信号简介 262

9.1.1 信号的基本概念 262

9.1.2 信号处理机制 265

9.2 信号操作的相关函数 268

9.2.1 信号的处理 268

9.2.2 信号的发送 276

9.2.3 信号的阻塞 284

9.2.4 计时器与信号 287

9.3 本章小结 288

实战演练 289

第10章 进程间通信 291

10.1 进程间通信简介 292

10.2 管道 293

10.2.1 管道的概念 293

10.2.2 管道的创建与关闭 294

10.2.3 管道的读写 295

10.3 命名管道 300

10.3.1 命名管道的概念 300

10.3.2 命名管道的创建 301

10.3.3 命名管道的读写 302

10.4 消息队列 306

10.4.1 消息队列的概念 306

10.4.2 消息队列的创建与打开 309

10.4.3 消息队列的读写 309

10.4.4 获得或设置消息队列属性 311

10.5 共享内存 316

10.5.1 共享内存的概念 316

10.5.2 共享内存的相关操作 317

10.6 信号量 322

10.6.1 信号量的概念 322

10.6.2 信号量集的相关操作 323

10.7 本章小结 329

实战演练 330

第11章 线程控制 331

11.1 线程的基本概念 332

11.1.1 Linux线程简介 332

11.1.2 线程的标识符 333

11.1.3 用户态和核心态线程 333

11.1.4 线程的属性 334

11.2 线程控制的相关函数 334

11.2.1 pthread_create函数 334

11.2.2 pthread_exit函数 336

11.2.3 pthread_join函数 336

11.2.4 pthread_cancel函数 338

11.2.5 pthread_cleanup_push和pthread_cleanup_pop函数 338

11.2.6 pthread_detach函数 340

11.2.7 线程和进程操作函数对比 342

11.3 线程之间的通信和同步 342

11.3.1 互斥锁 343

11.3.2 条件变量 346

11.4 本章小结 351

实战演练 351

第12章 网络编程 353

12.1 网络编程的基础知识 354

12.1.1 计算机网络体系结构 354

12.1.2 传输控制协议TCP 358

12.1.3 用户数据报协议UDP 361

12.1.4 客户机/服务器模式 361

12.2 套接口编程基础 362

12.2.1 什么是套接口 362

12.2.2 端口号的概念 363

12.2.3 套接口的数据结构 364

12.2.4 基本函数 365

12.3 TCP套接口编程 368

12.3.1 TCP套接口通信工作流程 369

12.3.2 TCP套接口Client/Server程序实例 382

12.4 UDP套接口编程 387

12.4.1 UDP套接口通信工作流程 387

12.4.2 UDP套接口Client/Server程序实例 388

12.5 原始套接口编程 391

12.5.1 原始套接口的创建 392

12.5.2 原始套接口程序实例 392

12.6 本章小结 403

实战演练 403

第13章 Linux图形界面编程 405

13.1 Linux下的图形界面编程简介 406

13.1.1 Qt简介 406

13.1.2 GTK+简介 406

13.2 界面基本元件 408

13.2.1 一个简单的例子 409

13.2.2 窗口 410

13.2.3 标签 413

13.2.4 按钮 414

13.2.5 文本框 415

13.3 界面布局元件 418

13.3.1 表格 418

13.3.2 框 421

13.3.3 窗格 424

13.4 其他常用元件 426

13.4.1 进度条、微调按钮、组合框 426

13.4.2 单选按钮、复选按钮 430

13.4.3 下拉菜单 432

13.5 信号与回调函数 435

13.6 本章小结 437

实战演练 438

第Ⅲ部分 实战篇 443

第14章 设计Linux下的计算器 443

14.1 软件功能分析 444

14.2 程序模块的划分 445

14.3 软件的具体实现 447

14.3.1 头文件 447

14.3.2 十六进制界面显示函数 448

14.3.3 十进制界面显示函数 449

14.3.4 八进制界面显示函数 450

14.3.5 二进制界面显示函数 452

14.3.6 进制间转换函数 453

14.3.7 信号处理模块 456

14.3.8 主函数 465

14.4 软件使用效果演示 472

14.5 本章小结 473

第15章 Linux平台下聊天软件的设计 475

15.1 软件功能概述 476

15.1.1 服务器端功能需求 476

15.1.2 客户端功能需求 477

15.1.3 错误处理需求 478

15.2 Glade集成开发工具简介 478

15.3 软件功能模块划分 479

15.3.1 服务器功能模块划分 479

15.3.2 客户端功能模块划分 480

15.3.3 消息标识的定义 480

15.3.4 消息结构体的设计 481

15.4 服务器程序的具体实现 482

15.4.1 服务器消息处理流程 482

15.4.2 服务器主要函数和变量 483

15.4.3 服务器消息处理模块的设计与实现 484

15.4.4 服务器数据存储的方法 485

15.4.5 用户注册流程 485

15.5 客户端程序的具体实现 485

15.5.1 客户端操作流程 486

15.5.2 客户端发送和接收消息流程 486

15.5.3 客户端主要函数和变量 487

15.5.4 客户端功能模块的设计与实现 488

15.6 聊天软件使用效果演示 489

15.7 本章小结 493

第16章 Linux远程管理工具的设计 495

16.1 软件功能概述 496

16.1.1 Webmin简介 496

16.1.2 软件总体设计 496

16.2 服务器端程序设计 497

16.2.1 服务器端工作流程 498

16.2.2 系统用户管理操作 498

16.2.3 系统用户组的操作 500

16.2.4 系统服务启动管理 503

16.2.5 DNS管理操作 504

16.2.6 Apache服务管理操作 505

16.2.7 FTP服务管理操作 508

16.3 客户端程序 509

16.3.1 连接界面 509

16.3.2 主界面 511

16.4 本章小结 513

第17章 Linux下简易防火墙软件的设计 515

17.1 Netfilter基础 516

17.1.1 什么是Netfilter 516

17.1.2 Netfilter的HOOK机制 517

17.1.3 HOOK的调用 520

17.1.4 HOOK的实现 521

17.1.5 IPTables简介 523

17.1.6 Netfilter可以实现的控制功能 524

17.2 软件设计概述 525

17.2.1 软件整体框架 525

17.2.2 管理端的设计 527

17.2.3 控制端的设计 528

17.3 用Netfilter设计控制端功能模块 530

17.3.1 ICMP管理控制模块 530

17.3.2 FTP管理控制模块 532

17.3.3 HTTP管理控制模块 533

17.3.4 模块的编译、加载与卸载 534

17.4 软件功能测试 536

17.5 本章小结 538

第18章 基于Linux的嵌入式家庭网关远程交互操作平台的设计 539

18.1 嵌入式技术简介 540

18.1.1 嵌入式系统的概念 540

18.1.2 嵌入式操作系统 541

18.1.3 嵌入式处理器 542

18.2 家庭网关的概念及其网络体系结构 543

18.2.1 智能家庭网络的概念 544

18.2.2 家庭网关的远程交互操作技术简介 544

18.2.3 嵌入式家庭网关的网络体系结构 545

18.3 嵌入式家庭网关的开发平台 546

18.3.1 S3C2410微处理器简介 546

18.3.2 交叉编译环境的建立 548

18.4 远程交互平台的设计 549

18.4.1 应用软件的开发模式 549

18.4.2 嵌入式Web服务器 550

18.4.3 通用网关接口CGI 553

18.5 Linux下软件模块的具体实现 554

18.5.1 登录验证模块 555

18.5.2 串口通信模块 555

18.5.3 中央空调控制模块 556

18.5.4 智能水表数据采集模块 561

18.5.5 试验结果 562

18.6 本章小结 562