图书目录

目录

第1章Linux C语言程序设计/1

1.1C语言/1

1.1.1C语言简介/1

1.1.2C语言的发展历史/2

1.1.3C语言的特点/2

1.2Linux概述/3

1.3Linux C语言程序设计简介/4

1.3.1Linux应用编程、系统编程和内核编程/4

1.3.2Linux图形界面编程/4

1.4Linux C语言编程环境/5

1.4.1Ubuntu Linux虚拟机/5

1.4.2gedit、vim和nano/5

1.4.3C语言编译器及集成开发环境/6

1.4.4Hello World程序/6

1.5习题/7

第2章C语言基础Ⅰ/9

2.1数据/9

2.1.1数据类型/9

2.1.2常量/11

2.1.3变量和标识符/13

2.1.4数据类型转换/14

2.1.5转义字符(转义序列)/15

2.2运算符/16

2.2.1运算符和表达式/16

2.2.2算术运算/18

2.2.3赋值运算/18

2.2.4关系运算/19

2.2.5逻辑运算符/19

2.2.6条件运算符/20

2.2.7逗号运算符/20

2.2.8sizeof运算符与typedef类型声明/21

2.2.9位运算/21

2.2.10复合赋值运算符/22

2.3结构化程序设计/23

2.3.1顺序结构/23

2.3.2分支结构/24

2.3.3循环结构/26

2.4输入/输出/29

2.4.1标准输出函数printf/30

2.4.2标准输入函数scanf/32

2.5数组/34

2.5.1一维数组/34

2.5.2二维数组/35

2.5.3一维字符数组/36

2.5.4一维字符数组的输入/输出/36

2.5.5字符串处理函数/37

2.5.6二维字符数组/39

2.6习题/40

第3章C语言基础II/44

3.1函数/44

3.1.1C语言库函数/44

3.1.2函数定义和声明/44

3.1.3函数调用及参数传递/46

3.1.4函数的嵌套与递归/49

3.1.5回调函数/50

3.1.6return语句/50

3.1.7全局变量、局部变量和作用域/51

3.1.8变量的存储类别及生存期/52

3.1.9内部函数和外部函数/54

3.2预处理/54

3.2.1预处理的步骤/54

3.2.2宏定义和内联函数/55

3.2.3条件编译/57

3.2.4文件包含/57

3.3指针/58

3.3.1指针的基本运算/58

3.3.2指针与数组/61

3.3.3指针与const限定符/64

3.3.4指针与字符串/65

3.3.5指针函数与函数指针/65

3.3.6再讲回调函数/66

3.3.7可变参数/67

3.3.8二级指针与多级指针/68

3.3.9指针数组和数组指针/69

3.3.10动态内存管理/70

3.4结构体、共用体和枚举/71

3.4.1结构体/71

3.4.2位域/72

3.4.3共用体/73

3.4.4枚举/74

3.5零长数组、变长数组和动态数组/75

3.6编码风格与缩进工具indent/77

3.7习题/79

第4章编译与调试/82

4.1gcc、make、Makefile、cmake和CMakeLists.txt/82

4.1.1gcc/82

4.1.2make和Makefile/84

4.1.3cmake和CMakeLists.txt/90

4.2完整的编译过程/90

4.3调试程序/92

4.3.1调试(Debug)和GDB/92

4.3.2测试用例/93

4.3.3GDB启动程序/93

4.3.4断点/94

4.3.5观察点/95

4.3.6捕捉点/96

4.3.7信号/96

4.3.8单步调试/97

4.3.9打印输出/97

4.3.10函数栈帧/99

4.3.11TUI窗口/100

4.3.12函数跳转/101

4.3.13段错误/101

4.3.14coredump/101

4.3.15调试正在运行的程序/102

4.3.16调试多进程和多线程/103

4.3.17gdb使用示例/105

4.4习题/105

第5章链表/107

5.1单向链表/107

5.1.1单链表结构与链表结点类型/107

5.1.2创建单链表/108

5.1.3插入结点/109

5.1.4删除结点/109

5.1.5读取结点/110

5.1.6查找结点/110

5.1.7打印单链表/110

5.1.8逆转单链表/111

5.1.9构建单向循环链表/111

5.1.10销毁单链表/112

5.1.11主函数及测试结果/112

5.2双向链表/113

5.2.1双链表结构与链表结点类型/113

5.2.2创建双链表/113

5.2.3插入结点/115

5.2.4删除结点/115

5.2.5读取结点/116

5.2.6查找结点/116

5.2.7打印双链表/116

5.2.8逆转双链表/117

5.2.9构建双向循环链表/117

5.2.10销毁双向循环链表/118

5.2.11主函数及测试结果/118

5.3内核链表/119

5.3.1list_head/119

5.3.2offsetof、container_of和list_entry/120

5.3.3链表初始化/120

5.3.4插入结点/121

5.3.5删除结点/121

5.3.6替换结点/122

5.3.7移动结点/122

5.3.8判断函数/123

5.3.9合并结点/123

5.3.10遍历链表/124

5.3.11用户空间使用内核链表/124

5.4习题/125

第6章C标准库/127

6.1C语言标准和glibc/127

6.2标准输入/输出函数库/129

6.2.1fopen/fclose/130

6.2.2stdin/stdout/stderr/132

6.2.3errno与perror函数/132

6.2.4以字节为单位的I/O函数/133

6.2.5以字符串为单位的I/O函数/135

6.2.6以记录为单位的I/O函数/136

6.2.7格式化读写文件/137

6.2.8操作读写位置的函数/138

6.2.9FILE结构体及I/O缓冲区/140

6.3标准工具函数库/143

6.3.1动态内存分配与释放/144

6.3.2整数算术/145

6.3.3随机数/146

6.3.4数值字符串转换/147

6.3.5宽字符和多字节字符转换/148

6.4字符串处理函数库/152

6.4.1内存赋值/152

6.4.2取字符串的长度/153

6.4.3复制字符串/153

6.4.4比较字符串/154

6.4.5搜索字符串/155

6.4.6连接字符串/156

6.4.7分割字符串/157

6.4.8本地函数/158

6.5字符处理函数库/160

6.6数学函数库/161

6.7学生信息管理系统的设计与实现/163

6.7.1系统设计要求/163

6.7.2系统设计/163

6.7.3函数设计/164

6.7.4参考程序/165

6.7.5运行结果/168

6.8习题/168

第7章Linux系统调用/171

7.1C库函数和Linux系统调用/171

7.2Linux中使用系统调用的三种方法/173

7.2.1通过glibc封装的库函数/173

7.2.2使用syscall直接调用/173

7.2.3通过CPU指令调用/173

7.3Linux系统调用编程: 进程管理/174

7.4Linux系统调用编程: 进程间通信/177

7.5Linux系统调用编程: exec函数族/179

7.6Linux系统调用编程: 文件管理/181

7.7习题/188

第8章Socket编程/190

8.1Socket基本概念/190

8.1.1Socket是什么/190

8.1.2主机字节序与网络字节序/191

8.1.3Socket地址结构/192

8.1.4地址转换函数/194

8.1.5C/S架构/195

8.2Socket相关函数/196

8.2.1socket函数/196

8.2.2bind函数/196

8.2.3listen/connect函数/196

8.2.4accept函数/197

8.2.5网络I/O函数/198

8.2.6close函数/200

8.2.7getsockopt和setsockopt函数/200

8.2.8select函数/203

8.2.9poll函数/203

8.2.10epoll函数/204

8.3基于TCP的网络程序/205

8.3.1简单C/S应用程序的设计/206

8.3.2交互式C/S应用程序的设计/208

8.3.3简单聊天室应用程序的设计(select)/210

8.3.4聊天室应用程序的设计(select)/214

8.3.5简单C/S应用程序的设计(epoll)/219

8.4基于UDP的网络程序/221

8.4.1简单C/S应用程序的设计/221

8.4.2简单聊天室应用程序的设计/223

8.5原始套接字编程/225

8.6UNIX Domain Socket/227

8.7习题/230

第9章Linux函数库和进程地址空间/232

9.1静态库和共享库/232

9.2函数库的制作和使用/233

9.2.1静态库的制作和使用/234

9.2.2共享库的制作和使用/236

9.3显式链接共享库/239

9.4进程地址空间/241

9.4.132位系统的进程地址空间/241

9.4.264位系统的进程地址空间/244

9.4.3查看进程地址空间/245

9.4.4编程验证进程地址空间布局/249

9.5动态链接过程/250

9.5.1ELF文件格式/251

9.5.2加载解释器/252

9.5.3运行解释器/253

9.6习题/260

第10章Pthreads编程/261

10.1Pthreads概述/261

10.1.1Linux进程和线程/261

10.1.2Linux线程模型/262

10.1.3Pthreads简介/263

10.2Pthreads函数/263

10.2.1创建线程/263

10.2.2终止线程/264

10.2.3线程的结合和分离/265

10.2.4线程属性/268

10.2.5自动清理线程资源/273

10.2.6线程同步与互斥/274

10.3Pthreads编程示例/281

10.3.1读者写者/281

10.3.2生产者消费者/282

10.3.3哲学家就餐/283

10.4习题/285

第11章GTK图形界面编程/287

11.1GTK概述/287

11.2GLib概述/288

11.3信号和回调函数/295

11.4GTK控件/297

11.4.1非容器控件/297

11.4.2容器控件/297

11.5GTK图形界面编程/298

11.5.1Hello World/298

11.5.2GtkGrid/299

11.5.3Custom Drawing/301

11.5.4GtkBuilder创建界面/304

11.5.5Cambalache/306

11.6GTK图形界面聊天室/308

11.6.1聊天室服务器端/308

11.6.2聊天室客户端/311

11.6.3测试/316

11.7习题/317

第12章Linux内核编程/319

12.1Linux内核编程概念/319

12.2LKM编程: Hello World/320

12.2.1LKM签名验证/320

12.2.2Hello World模块的编写和运行/322

12.2.3模块参数和模块导出符号/324

12.3Linux驱动程序设计/327

12.3.1Linux驱动程序简介/327

12.3.2字符设备驱动程序/328

12.3.3虚拟网卡驱动程序/332

12.4习题/335

附录AASCII码表/337

附录B资源及学习网站/338

参考文献/339