《linux C编程实战》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:童永清编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2008
  • ISBN:9787115174086
  • 页数:412 页
图书介绍:本书结合实例讲解编译器gcc,调试器gdb的使用;精选一些面试常用题,提高读者C语言水平和面试能力;介绍文件操作,进程控制,信号,进程间通信,网络编程等Linux系统编程;每章都有实践性应用性很强的综合实例,在讲授实例时,特别地在实例中故意留有一些错误,再加以分析,以期更贴近实际,提高读者的调试排错能力;包含了作为一个良好程序开发人员所必需的实用技术,如命名规则,编程规范,错误处理,调试方法,模块的设计和测试;注重培养读者的项目开发能力和软件工程思想;某些章里还特别增加了“进一步学习建议”一节,强调可持续能力的培养。

第一篇 Linux和C编程基础 2

第1章 Linux系统概述 2

1.1 Linux操作系统介绍 2

1.1.1 Linux的发展历程 2

1.1.2 Linux的特性 2

1.1.3 Linux的内核版本和发行版本 3

1.2 C语言简介 4

1.2.1 C语言的发展历史 4

1.2.2 C语言的特点 5

1.3 Linux的安装、启动与关闭 5

1.4 Linux的基本使用 5

1.4.1 Linux终端 5

1.4.2 Linux Shell 5

1.4.3 Linux的常用命令 6

1.5 Linux下程序的开发环境和开发过程 9

1.6 习题 12

第2章 C编程基础、Vi和Emacs编辑器 13

2.1 C程序的结构 13

2.2 C语言的基本数据类型 14

2.2.1 整型 14

2.2.2 浮点型 16

2.2.3 字符型 17

2.3 运算符和表达式 19

2.3.1 算术运算符与算术表达式 20

2.3.2 赋值运算符与赋值表达式 22

2.3.3 逗号运算符与逗号表达式 22

2.4 标准输入输出函数 23

2.4.1 字符输出函数putchar 23

2.4.2 字符输入函数getchar 24

2.4.3 格式化输出函数printf 24

2.4.4 格式化输入函数scanf 26

2.5 Vi编辑器的使用 27

2.5.1 Vi的工作模式 27

2.5.2 启动Vi 28

2.5.3 保存文件和退出Vi 29

2.5.4 光标的移动 29

2.5.5 文本的删除 30

2.5.6 文本查找和替换 30

2.5.7 文本的复制与粘贴 30

2.6 Emacs编辑器的使用 31

2.7 命名规范 33

2.7.1 标识符 33

2.7.2 关键字 33

2.7.3 命名规范 33

2.8 面试题选与实例精讲 34

2.8.1 面试题选 34

2.8.2 实例精讲 35

2.9 习题 37

第3章 C程序控制结构和gcc编译器 38

3.1 C程序的控制结构 38

3.1.1 C程序语句概述 38

3.1.2 C程序的3种基本控制结构 39

3.2 分支控制结构 40

3.2.1 关系运算符与关系表达式 40

3.2.2 逻辑运算符与逻辑表达式 41

3.2.3 if语句 42

3.2.4 switch语句 44

3.3 循环控制结构 46

3.3.1 while语句 46

3.3.2 do...while语句 47

3.3.3 for语句 48

3.3.4 break语句和continue语句 50

3.4 gcc编译器 51

3.4.1 程序的编译过程 51

3.4.3 gcc的常用选项 52

3.4.3 gcc的报错类型及对策 54

3.5 面试题选与实例精讲 55

3.5.1 面试题选 55

3.5.2 实例精讲 56

3.6 习题 58

第4章 C函数、数组、指针和调试器gdb 59

4.1 函数 59

4.1.1 函数的定义 59

4.1.2 函数的调用 61

4.1.3 变量的访问控制和存储类别 64

4.2 数组 67

4.2.1 一维数组的定义和使用 67

4.2.2 二维数组的定义和使用 67

4.2.3 字符数组和字符串 69

4.3 指针 70

4.3.1 地址和指针 70

4.3.2 指针的定义和使用 71

4.3.3 指针和数组 72

4.3.4 指针和函数 75

4.3.5 指向字符串的指针 79

4.4 字符串函数 82

4.4.1 puts和gets 82

4.4.2 strcpy和strncpy 82

4.4.3 strcat和strncat 83

4.4.4 strcmp和strncmp 83

4.4.5 strlen 84

4.4.6 strlwr和strupr 84

4.4.7 strstr和strchr 84

4.5 调试器gdb 85

4.5.1 启动和退出gdb 85

4.5.2 显示和查找程序源代码 86

4.5.3 执行程序和获得帮助 87

4.5.4 设置和管理断点 87

4.5.5 查看和设置变量的值 91

4.5.6 控制程序的执行 93

4.6 面试题选 95

4.7 习题 106

第5章 C语言预处理、结构体和make的使用 107

5.1 C语言预处理命令 107

5.1.1 宏定义 107

5.1.2 文件包含 109

5.1.3 条件编译 110

5.2 结构体和共用体 111

5.2.1 声明和引用结构体 111

5.2.2 结构体和数组 113

5.2.3 结构体和指针 114

5.2.4 共用体 116

5.2.5 使用typedef 117

5.3 位运算 117

5.3.1 位运算符和位运算 117

5.3.2 位域 119

5.4 make的使用和Makefile的编写 120

5.4.1 make的一般使用 121

5.4.2 Makefile文件的构成 123

5.4.3 使用变量 127

5.4.4 隐含规则 131

5.4.5 使用条件语句 132

5.4.6 使用库 133

5.4.7 make命令参数详解 134

5.5 面试题选 135

5.6 进一步学习建议 140

5.7 习题 140

第二篇 Linux系统编程 142

第6章 文件操作 142

6.1 系统编程概述 142

6.2 Linux的文件结构 142

6.2.1 Linux的文件系统模型 143

6.2.2 文件的分类 144

6.2.3 文件的访问权限控制 145

6.3 文件的输入输出 147

6.3.1 文件的创建、打开与关闭 147

6.3.2 文件的读写 149

6.3.3 文件读写指针的移动 150

6.3.4 dup、dup2、fcntl、ioctl系统调用 152

6.4 文件属性操作 160

6.4.1 获取文件属性 160

6.4.2 设置文件属性 162

6.5 文件的移动和删除 164

6.5.1 文件的移动 164

6.5.2 文件的删除 165

6.6 目录操作 166

6.6.1 目录的创建和删除 166

6.6.2 获取当前目录 167

6.6.3 设置工作目录 167

6.6.4 获取目录信息 168

6.7 编程实践:实现自己的ls命令 170

6.8 习题 176

第7章 进程控制 177

7.1 进程概述 177

7.1.1 Linux进程 177

7.1.2 进程控制 179

7.1.3 进程的内存映像 179

7.2 进程操作 180

7.2.1 创建进程 180

7.2.2 创建守护进程 185

7.2.3 进程退出 187

7.2.4 执行新程序 188

7.2.5 等待进程结束 191

7.3 进程的其他操作 194

7.3.1 获得进程ID 194

7.3.2 setuid和setgid 194

7.3.3 改变进程的优先级 196

7.4 编程实践:实现自己的myshell 197

7.5 习题 203

第8章 线程控制 204

8.1 线程和进程关系 204

8.2 创建线程 205

8.2.1 线程创建函数pthread_create 205

8.2.2 线程属性 207

8.3 线程终止 208

8.4 私有数据 210

8.5 线程同步 212

8.5.1 互斥锁 212

8.5.2 条件变量 213

8.5.3 异步信号 216

8.6 出错处理 216

8.6.1 错误检查 216

8.6.2 错误码 217

8.6.3 错误的提示信息 218

8.7 习题 219

第9章 信号及信号处理 220

9.1 Linux信号介绍 220

9.1.1 信号的来源 220

9.1.2 信号的种类 220

9.1.3 进程对信号的响应 223

9.2 信号处理 223

9.2.1 信号的捕捉和处理 223

9.2.2 信号处理函数的返回 227

9.2.3 信号的发送 231

9.2.4 信号的屏蔽 236

9.3 编程中如何获得帮助 240

9.4 编程实践:应用实例 240

9.4.1 实例一:信号的发送与处理 240

9.4.2 实例二:信号应用于事件通知 242

9.5 习题 244

第10章 进程间通信 245

10.1 进程间通信概述 245

10.2 管道 246

10.2.1 管道的概念 246

10.2.2 管道的创建与读写 246

10.2.3 管道的应用实例 250

10.3 有名管道 251

10.3.1 有名管道的概念 251

10.3.2 有名管道的创建与读写 252

10.3.3 有名管道的应用实例 253

10.4 消息对列 256

10.4.1 消息对列的基本概念 256

10.4.2 消息队列的创建与读写 257

10.4.3 获取和设置消息队列的属性 260

10.4.4 消息队列的应用实例 262

10.5 信号量 265

10.5.1 信号量的基本概念 265

10.5.2 信号量的创建与使用 265

10.5.3 信号量的应用实例 268

10.6 共享内存 270

10.6.1 共享内存的数据结构 270

10.6.2 共享内存的创建与操作 270

10.6.3 共享内存的应用实例 271

10.7 库的创建和使用 275

10.7.1 Linux库的概念 275

10.7.2 静态库的创建和使用 276

10.7.3 动态库的创建和使用 277

10.8 进一步学习建议 279

10.9 习题 279

第三篇 Linux网络和图形界面编程第11章 网络编程 282

11.1 网络编程基本原理 282

11.1.1 网络模型与协议 282

11.1.2 地址 284

11.1.3 端口 285

11.1.4 IP协议 285

11.1.5 用户数据报协议UDP 286

11.1.6 传输控制协议TCP 286

11.1.7 客户机/服务器模型 287

11.2 套接字编程 287

11.2.1 套接字地址结构 288

11.2.2 创建套接字 288

11.2.3 建立连接 289

11.2.4 绑定套接字 290

11.2.5 在套接字上监听 290

11.2.6 接受连接 291

11.2.7 TCP套接字的数据传输 291

11.2.8 UDP套接字的数据传输 292

11.2.9 关闭套接字 294

11.2.10 主要系统调用函数 294

11.3 一个面向连接的Client/Server实例 301

11.4 编写安全的代码 308

11.4.1 网络攻击 308

11.4.2 缓冲区溢出 309

11.4.3 输入检查 310

11.5 编程实践:编程实现端口扫描器实例 311

11.6 进一步学习建议 314

11.7 习题 314

第12章 GTK+图形界面编程 315

12.1 Linux下的图形界面编程 315

12.1.1 Qt和GTK+ 315

12.1.2 GTK+简介 315

12.2 一个简单的例子 316

12.3 消息和回调函数 319

12.4 GTK+的面向对象机制 320

12.5 排列控件 323

12.5.1 使用box排列控件 323

12.5.2 使用table排列控件 325

12.6 常用控件 330

12.6.1 进度条、微条按钮、组合框 330

12.6.2 表格控件 332

12.6.3 生成对话框 333

12.6.4 使用菜单 334

12.7 进一步学习建议 336

第四篇 Linux项目实践 338

第13章 项目实践:BT下载软件的开发 338

13.1 BT软件简述 338

13.2 BitTorrent协议 339

13.2.1 概要介绍 339

13.2.2 基于BT协议的文件分发系统的构成 339

13.2.3 B编码 340

13.2.4 种子文件的结构 340

13.2.5 与Tracker交互 342

13.2.6 peer之间的通信协议 343

13.2.7 关键算法和策略 345

13.3 系统结构设计 347

13.4 各个模块的设计和实现 348

13.4.1 种子解析模块的设计和实现 349

13.4.2 位图管理模块的设计和实现 359

13.4.3 出错处理模块的设计和实现 363

13.4.4 运行日志模块的设计和实现 364

13.4.5 信号处理模块的设计和实现 365

13.4.6 Peer管理模块的设计和实现 366

13.4.7 消息处理模块的设计和实现 372

13.4.8 缓冲管理模块的设计和实现 384

13.4.9 策略管理模块的设计和实现 393

13.4.10 连接Tracker模块的设计和实现 397

13.4.11 与peer交换数据模块的设计和实现 403

13.4.12 主函数的设计和实现 411

13.4.13 调试和测试 412