第1章 嵌入式Linux C语言开发工具 1
1.1 嵌入式Linux C语言概述 2
1.1.1 C语言简史 2
1.1.2 C语言特点 3
1.1.3 嵌入式Linux C语言编程环境 3
1.2 嵌入式Linux编辑器vi的使用 4
1.2.1 vi的基本模式 5
1.2.2 vi的基本操作 5
1.2.3 vi的使用实例分析 9
1.3 嵌入式Linux编译器GCC的使用 10
1.3.1 GCC概述 10
1.3.2 GCC编译流程分析 11
1.3.3 GCC警告提示 14
1.3.4 GCC使用库函数 16
1.3.5 GCC代码优化 18
1.4 嵌入式Linux调试器GDB的使用 18
1.4.1 GDB使用实例 18
1.4.2 设置/删除断点 22
1.4.3 数据相关命令 23
1.4.4 调试运行环境相关命令 23
1.4.5 堆栈相关命令 24
1.5 make工程管理器 24
1.5.1 Makefile基本结构 25
1.5.2 Makefile变量 27
1.5.3 Makefile规则 30
1.5.4 make使用 31
1.6 Eclipse集成开发环境 32
1.6.1 Eclipse简介 32
1.6.2 Eclipse相关术语 32
1.6.3 安装Eclipse集成开发环境(假设宿主机环境为ubuntu10.10) 34
1.6.4 Eclipse的使用 34
1.7 本章小结 45
1.8 本章习题 45
第2章 嵌入式Linux C语言基础 47
2.1 ANSI C与GNU C 48
2.1.1 ANSI C简介 48
2.1.2 GNU C简介 48
2.2 基本数据类型 49
2.2.1 整型家族 49
2.2.2 实型家族 52
2.2.3 字符型家族 53
2.2.4 枚举家族 54
2.2.5 指针家族 55
2.3 变量与常量 57
2.3.1 变量的定义 57
2.3.2 typedef 65
2.3.3 常量定义 66
2.4 运算符与表达式 67
2.4.1 算术运算符和表达式 68
2.4.2 赋值运算符和表达式 70
2.4.3 逗号运算符和表达式 72
2.4.4 位运算符和表达式 72
2.4.5 关系运算符和表达式 75
2.4.6 逻辑运算符和表达式 76
2.4.7 sizeof操作符 79
2.4.8 条件运算符(?) 79
2.4.9 运算符优先级总结 80
2.5 程序结构和控制语句 82
2.5.1 C语言程序结构 82
2.5.2 C语言控制语句 83
2.6 数组、结构体和指针 91
2.7 函数 115
2.7.1 概述 115
2.7.2 函数定义和声明 116
2.7.3 函数的参数、返回值和调用方法 118
2.8 _attribute_机制介绍 120
2.9 系统调用和应用程序编程接口 128
2.9.1 系统调用 128
2.9.2 应用程序编程接口 128
2.9.3 系统命令 129
2.10 本章小结 129
2.11 本章习题 130
第3章 嵌入式Linux C语言高级用法 131
3.1 预处理 132
3.1.1 预定义 132
3.1.2 文件包含 138
3.1.3 条件编译 139
3.2 C语言中的内存分配 141
3.2.1 C语言程序所占内存分类 141
3.2.2 堆和栈的区别 142
3.3 程序的可移植性考虑 143
3.3.1 字长和数据类型 143
3.3.2 数据对齐 144
3.3.3 字节顺序 144
3.4 C和汇编的接口 145
3.4.1 内嵌汇编的语法 145
3.4.2 编译器优化介绍 149
3.4.3 C语言关键字volatile 149
3.4.4 memory描述符 149
3.5 本章小结 150
3.6 本章习题 150
第4章 嵌入式Linux C内核常用数据结构 151
4.1 链表 152
4.1.1 单向链表 152
4.1.2 双向链表 156
4.1.3 循环链表 158
4.1.4 ARM Linux中链表使用实例 158
4.2 树、二叉树、平衡树 161
4.2.1 树的定义 161
4.2.2 二叉树 161
4.2.3 平衡树 169
4.2.4 ARM Linux中红黑树使用实例 171
4.3 哈希表 173
4.3.1 哈希表的概念及作用 173
4.3.2 哈希表的构造方法 174
4.3.3 哈希表的处理冲突方法 177
4.3.4 ARM Linux中哈希表使用实例 178
4.4 本章小结 180
4.5 本章习题 180
第5章 嵌入式Linux文件操作 181
5.1 Linux文件系统概述 182
5.1.1 虚拟文件系统 182
5.1.2 通用文件模型 183
5.1.3 Linux下的设备文件 188
5.2 Linux下的I/O操作 189
5.2.1 不带缓存的文件I/O操作 189
5.2.2 标准I/O 200
5.3 Linux下对文件和目录的操作 206
5.3.1 文件类型 206
5.3.2 文件访问权限 207
5.3.3 获取文件属性 207
5.3.4 修改文件访问权限 209
5.3.5 创建目录 210
5.3.6 创建链接文件 210
5.3.7 删除文件 211
5.3.8 重命名文件 211
5.4 嵌入式Linux串口应用开发 212
5.4.1 串口概述 212
5.4.2 串口设置详解 213
5.4.3 串口使用详解 218
5.5 本章小结 221
5.6 本章习题 221
第6章 嵌入式Linux进程和线程编程 222
6.1 Linux进程概述 223
6.1.1 进程描述符及任务结构 223
6.1.2 进程的调度 226
6.1.3 Linux中的线程 227
6.2 Linux进程控制相关API 227
6.3 ARM Linux进程间通信 234
6.3.1 管道通信 235
6.3.2 信号通信 237
6.3.3 共享内存 242
6.3.4 消息队列 244
6.4 ARM Linux线程相关API 247
6.5 Linux守护进程 252
6.5.1 守护进程概述 252
6.5.2 编写规则 253
6.5.3 守护进程实例 255
6.6 本章小结 256
6.7 本章习题 256
第7章 网络通信相关的C语言应用 257
7.1 TCP/IP协议简介 258
7.1.1 TCP/IP的分层模型 258
7.1.2 TCP/IP分层模型的特点 259
7.1.3 TCP/IP核心协议 261
7.2 套接字的基本知识 264
7.2.1 套接字概述 264
7.2.2 地址结构和字节序 264
7.3 套接字相关的API及应用 269
7.3.1 socket函数 269
7.3.2 bind函数 270
7.3.3 connect函数 271
7.3.4 listen函数 273
7.3.5 accept函数 273
7.3.6 send、recv函数 275
7.3.7 sendto和recvfrom函数 275
7.3.8 close和shutdown函数 276
7.3.9 setsockopt和getsockopt函数 277
7.3.10 getpeername函数 278
7.3.11 gethostname函数 278
7.3.12 编程实例 278
7.4 套接字高级编程 282
7.5 本章小结 286
7.6 本章习题 286
附录A 嵌入式Linux C函数快速参考 287