新書推薦:

《
一封情书
》
售價:NT$
218.0

《
俄罗斯北极地区:地理环境、自然资源与开发战略
》
售價:NT$
918.0

《
第一次管人
》
售價:NT$
316.0

《
白人贫困 美国社会分裂的真相
》
售價:NT$
352.0

《
蜂群城市(一部关于未来城市的硬科幻小说)
》
售價:NT$
296.0

《
2024中国旅游业发展报告
》
售價:NT$
296.0

《
现代中国思想的兴起 二十周年纪念版(两卷四册)
》
售價:NT$
1826.0

《
冲突:从“未开社会”到现代社会的人类学研究
》
售價:NT$
245.0
|
編輯推薦: |
“Linux典藏大系”畅销15年,经久不衰,累计销售30万余册。
广受好评的Linux畅销书全面升级,ChinaUnix社区力荐。
全面、系统、深入地探讨Linux环境C程序设计的核心技术。
通过复杂的项目案例全面展示开源软件的设计思想。
超值资料:596分钟教学视频 源代码 思维导图 教学PPT 习题答案 开发工具。
内容新颖:以当前流行的开发环境和工具的稳定版本进行讲解。
内容全面:涵盖Linux环境C编程的基础知识、高级技术与应用实战案例。
内容深入:深入介绍GNOME桌面环境的图形界面开发,代码达到可复用水平。
融会贯通:将Linux、C/C 与软件工程的思想结合起来讲解。
注重实践:贯穿近300个典型示例进行讲解,内容非常实用。
案例经典:用难度较高的媒体播放器案例贯穿全书,融入丰富的开发经验。
视频讲解:专门为重点内容录制多媒体教学视频,高效、直观。
提供习题:每章都提供习题,帮助读者巩固和自测重点内容的掌握情况。
注重技巧:各章都配思维导图,以及命令和关键字助记技巧,容易记忆。
“Linux典藏大系”畅销15年,经久不衰,累计销售30万余册。
|
內容簡介: |
《Linux环境C程序设计(第3版)》是获得大量读者好评的“Linux典藏大系”中的《Linux环境C程序设计》(第3版),内容丰富,从基础知识到高级技术和核心原理,再到项目开发,几乎涵盖Linux环境C程序设计的所有重要知识点。《Linux环境C程序设计(第3版)》提供大量实例,供读者实战演练,并提供教学视频、源程序、思维导图、习题参考答案和教学PPT等超值配套资源,帮助读者高效、直观地学习。
《Linux环境C程序设计(第3版)》共27章,分为6篇。第1篇“Linux基础知识”主要介绍Linux系统概述、Linux基本操作、GCC/G 编译器、GDB调试器、开发环境搭建等;第2篇“C/C 语言基础知识”主要介绍C语言编程基础、数据类型、运算符、表达式、程序控制结构、数组与指针、函数、字符与字符串处理、结构体与共用体、C 语言编程基础等;第3篇“Linux系统编程”主要介绍文件操作、文件I/O操作、进程控制、进程间的通信与线程控制等;第4篇“Linux网络编程与数据库开发”主要介绍网络编程基础、网络编程函数库、数据库开发、Linux系统常用数据库与接口等;第5篇“Linux界面开发”主要介绍界面开发基础知识、界面构件开发、界面布局、信号与事件处理、Glade程序界面设计等;第6篇“Linux环境C编程项目实战”详细介绍一个媒体播放器项目的开发过程,提高读者的实战水平。
《Linux环境C程序设计(第3版)》适合所有想全面学习Linux环境C程序设计的人员阅读,也适合基于Linux环境进行开发的工程技术人员阅读,还适合高等院校相关专业的学生和培训机构的学员作为学习用书。
《Linux网络编程(第3版)》是获得大量读者好评的“Linux典藏大系”中的《Linux网络编程》第3版。《Linux网络编程》第1、2版出版后得到了大量读者的好评,曾经多次印刷并得到了ChinaUnix技术社区的推荐。《Linux网络编程(第3版)》全面、系统、深入地介绍Linux网络编程的相关知识,涉及面很广,从编程工具和环境搭建,到高级技术和核心原理,再到项目实战,几乎涵盖Linux网络编程的所有重要知识点。《Linux网络编程(第3版)》提供教学视频、思维导图、教学PPT和习题参考答案等超值配套资料,可以帮助读者高效、直观地学习。
《Linux网络编程(第3版)》共20章,分为4篇。第1篇“Linux网络开发基础知识”,涵盖Linux操作系统概述、Linux编程环境、文件系统概述,以及程序、进程和线程等相关知识;第2篇“Linux用户层网络编程”,涵盖TCP/IP族概述、应用层网络服务程序概述、TCP网络编程基础知识、服务器和客户端信息获取、数据的I/O及其复用、基于UDP接收和发送数据、高级套接字、套接字选项、原始套接字、服务器模型、IPv6基础知识等;第3篇“Linux内核网络编程”,涵盖Linux内核层网络架构和netfilter框架的报文处理;第4篇“综合案例”,介绍3个网络编程综合案例的实现,包括一个简单的Web服务器SHTTPD的实现、一个简单的网络协议栈SIP的实现和一个简单的防火墙SIPFW的实现。
《Linux网络编程(第3版)》内容丰富,讲解深入,适合想全面、系统、深入学习Linux网络编程的人员阅读,尤其适合Linux网络开发工程技术人员和基于Linux平台的网络程序设计人员作为参考读物。
《Linux驱动开发入门与实战(第3版)》是获得大量读者好评的“Linux典藏大系”中的《Linux驱动开发入门与实战》(第3版)。《Linux驱动开发入门与实战(第3版)》内容充实,重点突出,实例丰富,实用性强,涵盖Linux驱动开发从基础知识到核心原理,再到应用实例的大部分核心知识。本书专门提供教学视频、源代码、思维导图、习题参考答案和教学PPT等超值配套资料,可以帮助读者高效、直观地学习。
《Linux驱动开发入门与实战(第3版)》共19章,分为3篇。第1篇“基础知识”涵盖Linux驱动开发概述、嵌入式处理器和开发板、构建嵌入式驱动程序开发环境、构建嵌入式Linux操作系统、构建第一个驱动程序、简单的字符设备驱动程序等内容;第2篇“核心技术”涵盖设备驱动的并发控制、设备驱动的阻塞和同步机制、中断与时钟机制、内外存访问等内容;第3篇“应用实战”涵盖设备驱动模型、RTC实时时钟驱动程序、看门狗驱动程序、IIC设备驱动程序、LCD设备驱动程序、触摸屏设备驱动程序、输入子系统设计、块设备驱动程序、USB设备驱动程序等内容。
《Linux驱动开发入门与实战(第3版)》适合所有想系统学习Linux驱动开发的入门与进阶人员阅读,也适合从事驱动开发的工程师阅读,还适合高等院校相关专业的学生和培训机构的学员作为学习用书。
|
關於作者: |
徐诚,毕业于华中科技大学计算机通信工程专业。擅长C与C 编程,精通Linux内核及其开发技术。从事Linux系统开发工作多年,有丰富的系统开发经验。曾多次在专业刊物上发表技术文章,并长期在CSDN担任社区专家。独立开发的基于移动Linux系统的MISSMOBLIN人工智能助手软件获得Intel公司举办的YourMove软件大赛中国区的第五名。
|
目錄:
|
第1篇 Linux基础知识
第1章 Linux系统概述 2
1.1 引言 2
1.2 Linux内核与版本 4
1.3 系统安装 6
1.4 小结 11
1.5 习题 11
第2章 Linux基本操作 12
2.1 登录 12
2.2 文件和目录 14
2.3 输入和输出 17
2.4 小结 17
2.5 习题 18
第3章 Linux C的编译器与调试器 19
3.1 GCC和G 编译器 19
3.2 程序和进程 21
3.3 ANSI C标准 22
3.4 编译hello world 23
3.5 GDB调试器 24
3.6 小结 26
3.7 习题 27
第4章 Linux开发环境 28
4.1 文本编辑工具 28
4.2 集成开发环境 30
4.3 使用Eclipse开发C和C 程序 31
4.4 小结 33
4.5 习题 34
第2篇 C/C 语言基础知识
第5章 C语言编程基础 36
5.1 程序设计语言的发展 36
5.2 C语言的特点 37
5.3 C语言的程序结构 38
5.4 算法 42
5.5 软件工程概述 45
5.6 小结 49
5.7 习题 49
第6章 数据类型、运算符和表达式 51
6.1 C语言的数据类型 51
6.2 常量与变量 53
6.3 整型数据 55
6.4 浮点型数据 56
6.5 字符型数据 57
6.6 运算符 59
6.7 表达式 63
6.8 C语言的预处理命令 64
6.9 小结 69
6.10 习题 69
第7章 程序控制结构 71
7.1 程序的3种基本结构 71
7.2 数据的输入与输出 71
7.3 条件控制语句 75
7.4 循环控制语句 77
7.5 媒体播放器——建立程序结构 81
7.6 小结 84
7.7 习题 84
第8章 数组与指针 86
8.1 一维数组 86
8.2 二维数组 89
8.3 多维数组 90
8.4 指针与指针变量 90
8.5 指针变量的定义与引用 92
8.6 指针与数组 93
8.7 指针的地址分配 96
8.8 指针数组 97
8.9 指向指针的指针 97
8.10 媒体播放器——建立播放列表 98
8.11 小结 104
8.12 习题 104
第9章 函数 106
9.1 函数说明与返回值 106
9.2 函数的作用域规则 108
9.3 函数的调用与参数 111
9.4 递归 112
9.5 实现问题 113
9.6 函数库和文件 114
9.7 main()函数的参数 117
9.8 媒体播放器——建立核心控制模块 117
9.9 小结 125
9.10 习题 125
第10章 字符与字符串处理 127
10.1 字符编码 127
10.2 字符处理库 128
10.3 字符串转换函数 129
10.4 字符串处理函数 131
10.5 字符串比较函数 132
10.6 字符串查找函数 133
10.7 字符串内存函数 134
10.8 字符串的其他函数 136
10.9 媒体播放器——实现播放列表的检索功能 136
10.10 小结 142
10.11 习题 142
第11章 结构体与共用体 144
11.1 结构体类型变量的定义和引用 144
11.2 结构体数组的定义和引用 146
11.3 结构体指针的定义和引用 147
11.4 共用体 148
11.5 媒体播放器——建立媒体库 150
11.6 小结 160
11.7 习题 161
第12章 C 语言编程基础 162
12.1 类和数据抽象 162
12.2 C 的特性 169
12.3 小结 174
12.4 习题 174
第3篇 Linux系统编程
第13章 文件操作 176
13.1 文件的属性与权限 176
13.2 文件管理 178
13.3 媒体播放器——增强媒体库的功能 186
13.4 小结 188
13.5 习题 188
第14章 文件I/O操作 190
14.1 非缓冲文件操作 190
14.2 缓冲文件操作 193
14.3 媒体播放器——完善播放列表 199
14.4 小结 202
14.5 习题 202
第15章 进程控制 204
15.1 进程简述 204
15.2 进程的基本操作 208
15.3 进程的特殊操作 213
15.4 小结 215
15.5 习题 216
第16章 进程间的通信 217
16.1 进程之间的管道通信 217
16.2 进程之间的D-Bus通信 220
16.3 媒体播放器——完善退出和音量控制功能 224
16.4 小结 227
16.5 习题 227
第17章 线程控制 228
17.1 线程的基本概念 228
17.2 线程的实现 228
17.3 POSIX线程库 229
17.4 同步 231
17.5 取消线程 235
17.6 多线程的实现 237
17.7 小结 238
17.8 习题 239
第4篇 Linux网络编程与数据库开发
第18章 网络编程基础 242
18.1 计算机网络的组成 242
18.2 TCP/IP概述 246
18.3 Socket套接字 250
18.4 网络通信 256
18.5 小结 260
18.6 习题 260
第19章 网络编程函数库 261
19.1 HTTP与FTP函数库 261
19.2 SMTP、POP与IMAP函数库 265
19.3 即时通信函数库 269
19.4 小结 278
19.5 习题 278
第20章 数据库开发 279
20.1 数据的存储与访问 279
20.2 Berkeley DB数据包 284
20.3 PostgreSQL数据库服务器 295
20.4 小结 305
20.5 习题 306
第21章 Linux系统常用数据库与接口 307
21.1 SQLite数据库 307
21.2 MySQL数据库 315
21.3 大型数据库与通用数据库接口 321
21.4 媒体播放器——媒体库的数据库实现 329
21.5 小结 335
21.6 习题 335
第5篇 Linux界面开发
第22章 界面开发基础知识 338
22.1 Linux常用的桌面环境 338
22.2 GTK 图形环境简介 340
22.3 GLib函数库简介 341
22.4 GObject对象简介 345
22.5 2D图形引擎Cairo简介 349
22.6 多媒体函数库GStreamer简介 351
22.7 搭建GTK 开发环境 355
22.8 小结 356
22.9 习题 357
第23章 界面构件开发 358
23.1 常用的界面构件 358
23.2 复合构件 372
23.3 菜单相关构件 381
23.4 小结 390
23.5 习题 390
第24章 界面布局 392
24.1 界面布局简介 392
24.2 组装盒构件 396
24.3 容器 401
24.4 媒体播放器——界面实现 421
24.5 小结 433
24.6 习题 433
第25章 信号与事件处理 435
25.1 信号函数与回调函数 435
25.2 常用的GTK 信号与事件 440
25.3 小结 453
25.4 习题 453
第26章 Glade程序界面设计 455
26.1 Glade简介 455
26.2 构造图形界面 456
26.3 C语言代码联编 471
26.4 小结 476
26.5 习题 476
第6篇 Linux 环境C编程项目实战
第27章 编程项目实战——媒体播放器的实现 480
27.1 软件工程实战 480
27.2 软件设计 482
27.3 版本控制 483
27.4 在Eclipse中使用Git 486
27.5 音量控制对话框 490
27.6 播放列表对话框 492
27.7 媒体库对话框 497
27.8 播放控制模块的实现 504
27.9 系统集成 510
27.10 主程序文件的实现 510
27.11 媒体库功能集成 513
27.12 播放列表功能集成 529
27.13 播放控制模块集成 540
27.14 小结 543
目录
第1篇 Linux网络开发基础知识
第1章 Linux操作系统概述 2
1.1 Linux的发展历史 2
1.2 Linux的发展要素 3
1.3 Linux与UNIX的异同 3
1.4 常见的Linux发行版本和内核版本的选择 4
1.5 Linux系统架构 5
1.6 GNU通用公共许可证 7
1.7 Linux软件开发的可借鉴之处 9
1.8 小结 9
1.9 习题 10
第2章 Linux编程环境 11
2.1 编辑器 11
2.2 GCC编译器工具集 16
2.3 Makefile文件简介 27
2.4 GDB调试工具 40
2.5 小结 52
2.6 习题 53
第3章 文件系统概述 54
3.1 Linux文件系统简介 54
3.2 文件的通用操作方法 64
3.3 socket文件类型 82
3.4 小结 82
3.5 习题 82
第4章 程序、进程和线程 84
4.1 程序、进程和线程的概念 84
4.2 进程产生的方式 85
4.3 进程间通信和同步 90
4.4 Linux线程 111
4.5 小结 120
4.6 习题 121
第2篇 Linux用户层网络编程
第5章 TCP/IP族概述 124
5.1 OSI网络分层简介 124
5.2 TCP/IP栈简介 126
5.3 IP地址分类与TCP/UDP端口 142
5.4 主机字节序和网络字节序 146
5.5 小结 149
5.6 习题 149
第6章 应用层网络服务程序概述 151
6.1 HTTP及其服务 151
6.2 FTP及其服务 153
6.3 TELNET协议及其服务 156
6.4 NFS协议及其服务 158
6.5 自定义网络服务 159
6.6 小结 162
6.7 习题 162
第7章 TCP网络编程基础知识 163
7.1 套接字编程基础知识 163
7.2 TCP网络编程流程 165
7.3 服务器/客户端实例 180
7.4 截取信号实例 185
7.5 小结 186
7.6 习题 187
第8章 服务器和客户端信息获取 188
8.1 字节序 188
8.2 字符串IP地址和二进制IP地址的转换 194
8.3 套接字描述符判定函数issockettype() 200
8.4 IP地址与域名的相互转换 201
8.5 协议名称处理函数 208
8.6 小结 212
8.7 习题 213
第9章 数据的I/O及其复用 214
9.1 I/O函数 214
9.2 I/O函数使用实例 220
9.3 I/O模型 230
9.4 select()和pselect()函数 232
9.5 poll()和ppoll()函数 236
9.6 非阻塞编程 237
9.7 小结 239
9.8 习题 239
第10章 基于UDP接收和发送数据 241
10.1 UDP程序设计简介 241
10.2 UDP程序设计的常用函数 243
10.3 UDP接收和发送数据实例 251
10.4 UDP程序设计的常见问题 253
10.5 小结 262
10.6 习题 262
第11章 高级套接字 263
11.1 UNIX域函数 263
11.2 广播 271
11.3 多播 279
11.4 数据链路层访问 287
11.5 小结 297
11.6 习题 297
第12章 套接字选项 299
12.1 获取和设置套接字选项 299
12.2 SOL_SOCKET协议族选项 303
12.3 IPPROTO_IP选项 312
12.4 IPPROTO_TCP选项 313
12.5 套接字选项使用实例 316
12.6 ioctl()函数 325
12.7 fcntl()函数 337
12.8 小结 338
12.9 习题 338
第13章 原始套接字 340
13.1 原始套接字概述 340
13.2 创建原始套接字 341
13.3 使用原始套接字发送报文 342
13.4 使用原始套接字接收报文 343
13.5 原始套接字报文处理的结构 343
13.6 ping命令使用实例 350
13.7 洪水攻击 362
13.8 ICMP洪水攻击 362
13.9 UDP洪水攻击 367
13.10 SYN洪水攻击 370
13.11 小结 374
13.12 习题 374
第14章 服务器模型 376
14.1 循环服务器 376
14.2 并发服务器 381
14.3 TCP的高级并发服务器模型 387
14.4 I/O复用循环服务器 395
14.5 小结 400
14.6 习题 400
第15章 IPv6基础知识 402
15.1 IPv4的缺陷 402
15.2 IPv6的特点 403
15.3 IPv6的地址 403
15.4 IPv6的头部 407
15.5 IPv6运行环境 410
15.6 IPv6的结构定义 412
15.7 IPv6的套接字函数 414
15.8 IPv6的套接字选项与控制命令 415
15.9 IPv6的库函数 417
15.10 IPv6编程实例 419
15.11 小结 423
15.12 习题 423
第3篇 Linux内核网络编程
第16章 Linux内核层网络架构 426
16.1 Linux网络协议栈概述 426
16.2 软中断CPU报文队列及其处理 435
16.3 如何在内核中接收和发送socket数据 437
16.4 小结 439
16.5 习题 439
第17章 netfilter框架的报文处理 440
17.1 netfilter框架概述 440
17.2 iptables和netfilter 442
17.3 内核模块编程 446
17.4 5个钩子 453
17.5 注册和注销钩子 455
17.6 钩子处理实例 457
17.7 多个钩子的优先级设置 467
17.8 校验和问题 468
17.9 小结 469
17.10 习题 469
第4篇 综合案例
第18章 一个简单的Web服务器SHTTPD的实现 472
18.1 SHTTPD的需求分析 472
18.2 SHTTPD的模块分析和设计 478
18.3 SHTTPD各模块的实现 489
18.4 程序的编译和测试 511
18.5 小结 512
18.6 习题 513
第19章 一个简单的网络协议栈SIP的实现 514
19.1 功能描述 514
19.2 基本架构 516
19.3 SIP网络协议栈的存储区缓存 517
19.4 SIP网络协议栈的网络接口层 522
19.5 SIP网络协议栈的ARP层 531
19.6 SIP网络协议栈的IP层 539
19.7 SIP网络协议栈的ICMP层 551
19.8 SIP网络协议栈的UDP层 556
19.9 SIP网络协议栈的协议无关层 562
19.10 SIP网络协议栈的BSD接口层 564
19.11 SIP网络协议栈的编译 569
19.12 小结 570
19.13 习题 571
第20章 一个简单的防火墙SIPFW的实现 572
20.1 SIPFW防火墙功能描述 572
20.2 SIPFW防火墙需求分析 573
20.3 使用netlink机制进行用户空间和内核空间的数据交互 579
20.4 使用proc实现内核空间和用户空间通信 584
20.5 内核空间的文件操作函数 585
20.6 SIPFW防火墙的模块设计和分析 587
20.7 SIPFW防火墙各模块的实现 603
20.8 程序的编译和测试 615
20.9 小结 618
20.10 习题 619
目录
第1篇 基础知识
第1章 Linux驱动开发概述 2
1.1 Linux设备驱动基础知识 2
1.2 Linux操作系统与驱动的关系 4
1.3 Linux驱动程序开发简介 4
1.4 编写设备驱动程序的注意事项 6
1.5 Linux驱动的发展趋势 9
1.6 小结 10
1.7 习题 10
第2章 嵌入式处理器和开发板 11
2.1 处理器 11
2.2 ARM处理器 12
2.3 S3C2440开发板 19
2.4 小结 21
2.5 习题 21
第3章 构建嵌入式驱动程序开发环境 23
3.1 安装虚拟机和Linux系统 23
3.2 代码阅读工具Source Insight 30
3.3 小结 34
3.4 习题 35
第4章 构建嵌入式Linux操作系统 36
4.1 Linux操作系统简介 36
4.2 Linux操作系统的优点 37
4.3 Linux内核子系统 38
4.4 Linux源代码结构分析 40
4.5 内核配置选项 43
4.6 嵌入式文件系统简介 56
4.7 构建根文件系统简介 58
4.8 小结 65
4.9 习题 65
第5章 构建第一个驱动程序 67
5.1 升级内核 67
5.2 编写Hello World驱动程序 70
5.3 模块参数和模块之间的通信 76
5.4 将模块加入内核 81
5.5 小结 89
5.6 习题 89
第6章 简单的字符设备驱动程序 91
6.1 字符设备驱动程序框架 91
6.2 初识cdev结构体 95
6.3 字符设备驱动程序的组成 99
6.4 VirtualDisk字符设备驱动程序 101
6.5 小结 108
6.6 习题 108
第2篇 核心技术
第7章 设备驱动的并发控制 110
7.1 并发与竞争 110
7.2 原子变量操作 110
7.3 自旋锁 114
7.4 信号量 116
7.5 完成量 119
7.6 小结 122
7.7 习题 122
第8章 设备驱动的阻塞和同步机制 123
8.1 阻塞和非阻塞 123
8.2 等待队列 123
8.3 同步机制实验 126
8.4 小结 131
8.5 习题 131
第9章 中断与时钟机制 133
9.1 中断简述 133
9.2 中断的实现过程 135
9.3 按键中断实例 138
9.4 按键驱动程序实例分析 141
9.5 时钟机制 144
9.6 小结 146
9.7 习题 146
第10章 内外存访问 147
10.1 内存分配 147
10.2 页面分配 151
10.3 设备I/O端口的访问 155
10.4 小结 159
10.5 习题 159
第3篇 应用实战
第11章 设备驱动模型 162
11.1 设备驱动模型概述 162
11.2 设备驱动模型的核心数据结构 166
11.3 kobject对象的应用 173
11.4 设备驱动模型的三大组件 182
11.5 小结 191
11.6 习题 192
第12章 实时时钟驱动程序 193
12.1 RTC实时时钟的硬件原理 193
12.2 RTC实时时钟架构 199
12.3 RTC文件系统接口 204
12.4 小结 210
12.5 习题 211
第13章 看门狗驱动程序 212
13.1 看门狗概述 212
13.2 设备模型 214
13.3 看门狗设备驱动程序分析 220
13.4 小结 227
13.5 习题 227
第14章 IIC设备驱动程序 229
14.1 IIC设备的总线及其协议 229
14.2 IIC设备的硬件结构 230
14.3 IIC设备驱动程序的层次结构 232
14.4 IIC子系统的初始化 238
14.5 适配器驱动程序 240
14.6 IIC设备层驱动程序 255
14.7 小结 261
14.8 习题 262
第15章 LCD设备驱动程序 263
15.1 FrameBuffer概述 263
15.2 FrameBuffer结构分析 265
15.3 LCD驱动程序分析 272
15.4 小结 280
15.5 习题 280
第16章 触摸屏设备驱动程序 282
16.1 触摸屏设备的工作原理 282
16.2 触摸屏设备的硬件结构 283
16.3 触摸屏设备驱动程序分析 288
16.4 测试触摸屏设备驱动程序 294
16.5 小结 295
16.6 习题 295
第17章 输入子系统设计 297
17.1 input子系统入门 297
17.2 Handler处理器注册分析 308
17.3 input子系统 312
17.4 evdev输入事件驱动程序分析 313
17.5 小结 318
17.6 习题 318
第18章 块设备驱动程序 319
18.1 块设备概述 319
18.2 块设备驱动程序架构 322
18.3 通用块层 323
18.4 I/O调度器 328
18.5 编写块设备驱动程序 337
18.6 小结 345
18.7 习题 345
第19章 USB设备驱动程序 346
19.1 USB概述 346
19.2 USB设备驱动模型 352
19.3 USB设备驱动程序 362
19.4 获得USB设备信息 375
19.5 资源初始化 382
19.6 控制子线程 387
19.7 小结 396
19.8 习题 396
|
內容試閱:
|
Linux系统基于开源软件的思想产生,它促进了开源软件技术的发展,这种先进的软件设计思想引领全球软件业的变革,为软件技术的发展带来了强劲的动力。随着Linux系统的发展和广泛应用,如今它已经支持绝大多数嵌入式应用,并在服务器市场上占据很大的份额,其桌面系统的普及率逐年上升。越来越多的开发者希望了解Linux系统开发,特别是基于Linux系统的C程序设计。
笔者长期从事技术研究,曾经在CSDN等社区发表了多篇相关技术文章。但笔者觉得不成体系的文章对读者的帮助不大,于是萌生写作本书的想法,希望能将自己的经验分享给更多的读者。
本书是获得大量读者好评的“Linux典藏大系”中的《Linux环境C程序设计》(第3版)。本书全面介绍Linux环境下的程序开发,内容由浅入深,适合不同层次的读者阅读。在本书中,笔者不但会介绍Linux环境C程序设计的各个知识要点,而且还会介绍Linux所依存的开源软件思想,并将其与当前流行的软件工程思想相结合,贯穿于典型项目案例的开发过程中,让读者不但能掌握开发技术,而且还能获得与国际一流软件工程师一样的开发水平。
关于“Linux典藏大系”
“Linux典藏大系”是专门为Linux技术爱好者推出的系列图书,涵盖Linux技术的方方面面,可以满足不同层次和各个领域的读者学习Linux的需求。该系列图书自2010年1月陆续出版,上市后深受广大读者的好评。2014年1月,创作者对该系列图书进行了全面改版并增加了新品种。新版图书一上市就大受欢迎,各分册长期位居Linux图书销售排行榜前列。截至2023年6月底,该系列图书累计印数超过30万册。可以说,“Linux典藏大系”是Linux图书市场上的明星品牌,该系列中的一些图书多次被评为清华大学出版社“年度畅销书”,还曾获得“51CTO读书频道”颁发的“最受读者喜爱的原创IT技术图书奖”,另有部分图书的中文繁体版在中国台湾出版发行。该系列图书的出版得到了国内Linux知名技术社区ChinaUnix(简称CU)的大力支持和帮助,读者与CU社区中的Linux技术爱好者进行了广泛的交流,取得了良好的学习效果。另外,该系列图书还被国内上百所高校和培训机构选为教材,得到了广大师生的一致好评。
关于第3版
随着技术的发展,本书第2版与当前Linux的几个流行版本有所脱节,这给读者的学习带来了不便。应广大读者的要求,笔者结合Linux技术的新近发展对第2版图书进行全面的升级改版,推出第3版。相比第2版图书,第3版在内容上的变化主要体现在以下几个方面:
* Linux系统由Fedora更换为Ubuntu 22.04;
* Eclipse更新为2022-02版;
* 版本控制工具由CVS更新为普遍流行的Git;
* 修订了第2版中的一些疏漏,并对一些不准确的内容重新表述;
* 新增思维导图(提供电子版高清大图)和课后习题,以方便读者学习。
本书特色
1.配多媒体教学视频,学习效果好
本书重点内容提供大量的配套多媒体教学视频,可以帮助读者更加轻松、直观、高效地学习,取得更好的学习效果。
2.内容全面、系统、深入
本书详细介绍Linux系统安装、Linux环境C开发基础知识、界面开发、数据库开发、网络编程、系统功能编程和多媒体开发等内容,并通过开发媒体播放器的各个模块,让读者深入理解一个完整项目的开发流程。
3.讲解由浅入深,循序渐进,适合各个层次的读者阅读
本书从Linux环境C程序设计基础知识开始讲解,逐步深入高级开发技术与应用,章节安排从易到难,讲解由浅入深,循序渐进,适合各个层次的读者阅读,并均有所获。
4.技术全面,剖析思想根源
抛开开源思想研究Linux开发是徒劳的,开发者只能掌握表面的开发技术,而不能获得提高软件开发效率与项目成功率的科学方法。笔者结合开源库和项目案例,将Linux系统开发、C/C 开发和软件工程思想融会贯通,深入剖析Linux环境C程序设计。
5.深入剖析典型案例
本书选择一些有一定难度的软件项目案例进行讲解,这些案例涵盖当前流行的开发技术,可以帮助读者实践先进的软件设计思想,并掌握实用的一线开发技术,从而提升职场竞争力。
6.提供习题、源代码、思维导图和教学PPT
本书特意在每章后提供多道习题,帮助读者巩固和自测该章的重要知识点,并提供源代码、思维导图和教学PPT等配套资源,以方便读者学习和教师教学。
本书内容
第1篇 Linux基础知识
本篇涵盖第1~4章,主要介绍Linux的历史、内核与版本,以及Linux系统安装、Linux基本操作、GCC/G 编译器、GDB调试器与Linux C开发环境搭建等。通过学习本篇内容,读者可以系统掌握Linux的基础知识,以及搭建Linux开发环境的能力。
第2篇 C/C 语言基础知识
本篇涵盖第5~12章,主要介绍C语言编程基础、数据类型、运算符、表达式、程序控制结构、数组、指针、函数、字符、字符串、结构体、共用体,以及C 语言面向对象程序设计思想和一些新特性等。通过学习本篇内容,读者可以掌握C语言的基础知识,并对C 语言的面向对象特性有所理解。
第3篇 Linux系统编程
本篇涵盖第13~17章,主要介绍文件操作、文件I/O操作、进程控制、进程间的通信和线程控制等。通过学习本篇内容,读者可以掌握Linux环境C程序设计中有关系统功能编程的核心技术与应用。
第4篇 Linux网络编程与数据库开发
本篇涵盖第18~21章,主要介绍网络编程基础、网络编程函数库、数据库开发、Linux系统常用数据库与接口。通过学习本篇内容,读者可以掌握Linux环境C程序设计中的数据库和网络编程技术与应用。
第5篇 Linux界面开发
本篇涵盖第22~26章,主要介绍界面开发基础知识、界面构件开发、界面布局、信号与事件处理、Glacle程序界面设计。通过学习本篇内容,读者可以独立完成一些简单的界面设计,并掌握如何与C语言进行连接。
第6篇 Linux环境C编程项目实战
本篇涵盖第27章,主要介绍一个媒体播放器的开发过程,以便读者对Linux环境下的项目开发有一个全面的认识,从而提高实际项目开发水平。通过学习本篇内容,读者可以具备基本的Linux环境下软件项目开发的能力。
读者对象
* Linux环境C程序设计初学者;
* 全面学习Linux环境C编程的人员;
* Linux环境C程序设计从业人员;
* Linux环境C程序设计爱好者;
* 需要一本案头必需手册的程序员;
* 高等院校的学生与培训机构的学员。
配书资源获取方式
本书涉及的配套资源如下:
* 配套教学视频;
* 程序源代码文件;
* 高清思维导图;
* 习题参考答案;
* 配套教学PPT;
* 书中涉及的开发工具。
上述配套资源有以下3种获取方式:
* 关注微信公众号“方大卓越”,然后回复数字“4”,即可自动获取下载链接;
* 在清华大学出版社网站(www.tup.com.cn)上搜索到本书,然后在本书页面上找到“资源下载”栏目,单击“网络资源”按钮进行下载;
* 在本书技术论坛(www.wanjuanchina.net)上的Linux模块进行下载。
技术支持
虽然笔者对书中所述内容都尽量予以核实,并多次进行文字校对,但因时间所限,可能还存在疏漏和不足之处,恳请读者批评与指正。
读者在阅读本书时若有疑问,可以通过以下方式获得帮助:
* 加入本书QQ交流群(群号:302742131)进行提问;
* 在本书技术论坛(网址见上文)上留言,会有专人负责答疑;
* 发送电子邮件到book@ wanjuanchina.net 或bookservice2008@163.com获得帮助。
编者
2024年2月
前言
当前,Linux已经成为非常流行的开源操作系统,在服务器和嵌入式系统等领域有广泛的应用,而且正在逐步应用于个人计算机的桌面操作系统上。Linux网络程序设计在服务器和嵌入式领域有着广泛的应用。例如,Web服务器、P2P应用、嵌入式网络机顶盒、IPTV机顶盒和手持设备等产品很多都采用开源的Linux操作系统。因此,能够熟练编写网络程序并构建自己的网络架构程序,对于程序开发人员是十分重要的。
本书是获得大量读者好评的“Linux典藏大系”中的一本。本书全面、系统、深入地介绍Linux网络编程涉及的相关技术,涉及面很广,从编程工具和环境搭建,到核心原理和高级技术,再到项目实战,几乎涵盖Linux网络编程的所有重要知识点。其中,结合实例重点介绍Linux应用层网络设计、网络协议栈的实现原理和Linux内核防火墙技术。通过阅读本书,读者可以全面掌握Linux网络编程方方面面的技术,具备开发较为复杂网络项目的能力。
关于“Linux典藏大系”
“Linux典藏大系”是专门为Linux技术爱好者推出的系列图书,涵盖Linux技术的方方面面,可以满足不同层次和各个领域的读者学习Linux的需求。该系列图书自2010年1月陆续出版,上市后深受广大读者的好评。2014年1月,创作者对该系列图书进行了全面改版并增加了新品种。新版图书一上市就大受欢迎,各分册长期位居Linux图书销售排行榜前列。截至2023年10月底,该系列图书累计印数超过30万册。可以说,“Linux典藏大系”是图书市场上的明星品牌,该系列中的一些图书多次被评为清华大学出版社“年度畅销书”,还曾获得“51CTO读书频道”颁发的“最受读者喜爱的原创IT技术图书奖”,另有部分图书的中文繁体版在中国台湾出版发行。该系列图书的出版得到了国内Linux知名技术社区ChinaUnix(简称CU)的大力支持和帮助,读者与CU社区中的Linux技术爱好者进行了广泛的交流,取得了良好的学习效果。另外,该系列图书还被国内上百所高校和培训机构选为教材,得到了广大师生的一致好评。
关于第3版
随着技术的发展,本书第2版与当前Linux的几个流行版本有所脱节,这给读者的学习带来了不便。应广大读者的要求,笔者结合Linux技术的新近发展对第2版图书进行全面的升级改版,推出第3版。相比第2版图书,第3版在内容上的变化主要体现在以下几个方面:
* Linux系统更换为Ubuntu 22.04;
* 对Linux内核的介绍增加5.*系列;
* 对IT业界的动态信息进行更新;
* 对GCC软件包进行更新;
* 修订第2版中的一些疏漏,并对一些表述不够准确的内容重新表述;
* 对涉及的一些函数及其格式进行修改;
* 新增思维导图和课后习题,以方便读者梳理和巩固所学知识。
本书特色
1.提供配套教学视频,学习效果好
为了帮助读者更加高效、直观地学习,笔者专门针对书中的一些重点和难点内容录制配套教学视频,手把手带领读者进行学习。
2.内容由浅入深,讲解循序渐进
本书按照“基础知识→高级技术→进阶实战”的思路讲解,首先介绍Linux的基础知识与开发环境,然后介绍基本的Linux网络程序设计方法,接着介绍Linux内核网络编程方法,最后通过3个案例综合运用所介绍的知识,让读者更加深刻地理解Linux网络编程技术。
3.内容充实,涵盖面广
本书几乎涵盖Linux网络程序设计会用到的所有重要知识点,尤其对高级网络编程和原始套接字等用户层网络程序设计结合丰富的示例进行全面的讲解,另外对内核网络程序设计进行深入的剖析,还对netfilter框架进行详细的讲解,并给出一个全面使用netfilter框架的案例,以方便读者深入学习。
4.对比分析,讲解深入
本书在介绍多个主要函数时对用户空间和内核空间进行对比分析,让读者不但了解如何使用这些函数,而且能更加深入地理解为何这样用,做到所谓“知其然并知其所以然”。
5.案例精讲,提高实际开发水平
本书通过精讲3个典型案例,帮助读者更加深入地理解前面章节介绍的Linux网络编程的重要知识点,从而提高读者的实际开发水平。
6.提供习题、源代码、思维导图和教学PPT
本书特意在每章后提供多道习题,用以帮助读者巩固和自测该章的重要知识点,另外还提供源代码、思维导图和教学PPT等配套资源,以方便读者学习和教师教学。
本书内容
第1篇 Linux网络开发基础知识
本篇涵盖第1~4章,主要包括Linux操作系统概述、Linux编程环境、文件系统概述,以及程序、进程和线程等相关知识。通过学习本篇内容,读者可以初步掌握Linux网络程序设计的基础知识,并了解Linux编程环境的相关知识。
第2篇 Linux用户层网络编程
本篇涵盖第5~15章,主要包括TCP/IP族概述、应用层网络服务程序概述、TCP网络编程基础知识、服务器和客户端信息获取、数据的I/O及其复用、基于UDP接收和发送数据、高级套接字、套接字选项、原始套接字、服务器模型、IPv6基础知识等。通过学习本篇内容,读者可以全面、系统、深入地掌握Linux网络程序设计的大部分知识。
第3篇 Linux内核网络编程
本篇涵盖第16、17章,主要包括Linux内核层网络架构和netfilter框架的报文处理。通过学习本篇内容,读者可以初步掌握Linux内核网络编程的相关知识。
第4篇 综合案例
本篇涵盖第18~20章,主要介绍3个网络编程综合案例的实现,包括一个简单的Web服务器SHTTPD的实现、一个简单的网络协议栈SIP的实现和一个简单的防火墙SIPFW的实现。通过学习本篇内容,读者可以掌握如何编写一个完整、可用的Linux网络程序。
阅读建议
* 对于没有基础的读者,尽量从前到后按顺序阅读,不要随意跳跃;
* 书中给出的示例和案例需要读者亲自上机动手实践,这样学习效果更好;
* 第4篇偏重于实战,这部分内容初期不需要读者全面掌握,只要理解基本的开发思路即可,等有了较丰富的开发经验后可进一步研读。
读者对象
* 想全面学习Linux网络编程的人员;
* Linux网络编程从业人员;
* Linux网络编程爱好者;
* 高等院校相关专业的学生;
* 培训机构的学员;
* 需要一本案头必需手册的开发人员。
配书资源获取方式
本书涉及的配套资源如下:
* 示例和案例源代码;
* 配套教学视频;
* 高清思维导图;
* 习题参考答案;
* 配套教学PPT;
* 书中涉及的工具。
上述配套资源有以下3种获取方式:
* 关注微信公众号“方大卓越”,然后回复数字“17”,可自动获取下载链接;
* 在清华大学出版社网站(www.tup.com.cn)上搜索到本书,然后在本书页面上找到“资源下载”栏目,单击“网络资源”按钮进行下载;
* 在本书技术论坛(www.wanjuanchina.net)上的Linux模块进行下载。
技术支持
虽然笔者对书中所述内容都尽量予以核实,并多次进行文字校对,但是因时间所限,可能还存在疏漏和不足之处,恳请读者批评与指正。
读者在阅读本书时若有疑问,可以通过以下方式获得帮助:
* 加入本书QQ交流群(群号:302742131)进行提问;
* 在本书技术论坛(见上文)上留言,会有专人负责答疑;
* 发送电子邮件到book@wanjuanchina.net或bookservice2008@163.com获得帮助。
编 者
|
|