GNU/Linux编程指南:入门·应用·精通
副标题:无
分类号:
ISBN:9787302055501
微信扫一扫,移动浏览光盘
简介
本书全面而深入地介绍了GNU/Linux编程。首先介绍了在Linux上编程必备的编程工具。然后在库函数、系统调用以及核上阐述Linux编程知识,并专门讲述了包括TCP/IP、UDP以及多播套拉口在内的网络编程知识;图形界面也是本书的重点内容,本书着重讲述了文本形式的图形界面库ncurses;还分别讲解了真正图形化的流行系统XWindows、Qt、GNOME以及OpenGL的基本编程方法;最后,介绍了Bash编程和设备驱动编程。本书包含大量实用实例,读者可以通过实例代码深入理解编程思想和技巧。本书另一优点是讲述了其他编程书籍通常没有提及的RPM包管理工具、文档编写以及发布许可证选择等内容,这是任何准备投身于GNU开发工作的程序员所必须具备的知识。本书对于所有Linux编程人员——无论是初学者还是高级用户——都是一本不可多得的参考资料。
目录
第1章 linux及linux编程综述 1
1.1 linux变得成熟了 1
1.1.1 linux的昨天 1
1.1.2 linux的今天 3
1.1.3 linux的明天 3
1.2 为何选择linux编程 3
1.3 每章内容介绍 5
1.3.1 linux编程工具包 5
1.3.2 输入、输出、文件和目录 5
1.3.3 进程和同步 6
1.3.4 网络编程 6
1.3.5 用户界面编程 7
1.3.6 特殊编程技术 8
1.3.7 补充内容 8
1.4 小结 8
第2章 设置开发系统 9
2.1 一般性考虑 9
2.2 主板和cpu 10
2.2.1 板上i/o 12
2.2.2 处理器 12
.2.2.3 bios 13
2.2.4 内存 13
2.2.5 机箱和电源 13
2.3 用户交互硬件:视频、声音、键盘及鼠标 14
2.3.1 显卡 14
2.3.2 显示器 15
2.3.3 声卡 16
2.3.4 键盘及鼠标 16
2.4 通信设备、端口及总线 17
2.4.1 调制解调器 17
2.4.2 网络接口卡 18
2.4.3 scsi 18
2.4.4 usb和火线(ieee1394) 18
2.4.5 串行卡 18
2.4.6 irda 19
2.4.7 pcmcia卡 19
2.4.8 isa即插即用设备 19
2.5 存储设备 19
2.5.1 硬盘 20
2.5.2 可移动磁盘设备 20
2.5.3 cd-rom/dvd 20
2.5.4 磁带备份设备 20
2.6 外围设备 21
2.6.1 打印机 21
2.6.2 扫描仪 21
2.6.3 数字相机 22
2.6.4 家居自动控制设备 22
2.7 完备型系统 22
2.8 便携系统 22
2.9 开发工具软件 23
2.9.1 关键库和头文件 23
2.9.2 调试器 23
2.9.3 编程工具 23
2.9.4 文本编辑器 24
2.10 小结 24
第3章 使用gnu cc 25
3.1 gnu cc特性 25
3.2 教学示例 26
3.3 常用命令行选项 29
3.3.1 函数库和包含文件 30
3.3.2 警告和出错消息选项 31
3.4 优化选项 36
3.5 调试选项 38
3.6 特定体系结构的选项 40
3.7 gnu c扩展 41
3.7.1 关于可移植性 41
3.7.2 gnu扩展 42
3.8 pgcc:奔腾处理器的编译器 45
3.9 小结 45
第4章 使用gnu make管理项目 46
4.1 为何使用make 46
4.2 编写makefile 46
4.3 编写makefile的规则 47
4.3.1 伪目标 49
4.3.2 变量 50
4.3.3 隐式规则 52
4.3.4 模式规则 53
4.3.5 注释 53
4.4 命令行选项和参数 53
4.5 调试make 54
4.6 常见的make出错信息 54
4.7 有用的makefile目标 54
4.8 小结 55
第5章 创建可移植的自配置软件 56
5.1 考虑可移植性 56
5.1.1 什么是程序的可移植性 56
5.1.2 移植性的线索和技巧 57
5.2 理解autoconf 58
5.2.1 创建configure.in 58
5.2.2 构造文件 58
5.2.3 有用的autoconf工具 59
5.3 内置宏 62
5.3.1 候选程序测试 62
5.3.2 库函数测试 63
5.3.3 头文件测试 64
5.3.4 结构测试 64
5.3.5 类型定义测试 64
5.3.6 编译器行为测试 65
5.3.7 系统服务测试 65
5.3.8 unix变体测试 66
5.4 普通宏 66
5.5 一个带注释的autoconf脚本 68
5.6 小结 74
第6章 比较和合并源代码文件 75
6.1 使用diff命令比较文件 75
6.2 理解diff3命令 83
6.3 准备源代码补丁 86
6.3.1 patch的命令行选项 86
6.3.2 创建补丁 87
6.3.3 应用补丁 88
6.4 小结 88
第7章 使用rcs和cvs控制版本 89
7.1 基本术语 89
7.2 使用修订控制系统(rcs) 90
7.2.1 rcs基本用法 90
7.2.2 找出rcs文件间的不同 95
7.2.3 其他rcs命令 98
7.3 使用并发版本系统(cvs) 100
7.3.1 同rcs相比的优点 100
7.3.2 设置cvs 100
7.3.3 检出源代码文件 102
7.3.4 将改动合并进源代码库 103
7.3.5 检查改动 103
7.3.6 添加和删除文件 104
7.3.7 解决文件冲突 105
7.3.8 cvs命令 106
7.3.9 cvs选项 106
7.4 小结 107
第8章 调试 108
8.1 为使用gdb进行编译 108
8.2 使用基本的gdb命令 109
8.2.1 启动gdb 109
8.2.2 在调试器中查看代码 111
8.2.3 检查数据 111
8.2.4 设置断点 113
8.2.5 检查并更改运行中的代码 114
8.3 高级gdb概念和命令 116
8.3.1 变量的作用域和上下文 116
8.3.2 遍历函数堆栈 117
8.3.3 操纵源代码文件 119
8.3.4 与shell进行通信 119
8.3.5 附加到某个运行中的程序 119
8.4 小结 121
第9章 出错处理 122
9.1 出错处理简述 122
9.2 出错处理选项 122
9.3 c语言机制 123
9.3.1 assert宏 123
9.3.2 使用预编译 125
9.3.3 标准库函数 127
9.4 使用系统日志 133
9.4.1 系统日志选项 134
9.4.2 系统日志函数 135
9.4.3 用户程序 138
9.5 小结 139
第10章 使用库 140
10.1 使用编程库 140
10.1.1 库兼容性 140
10.1.2 命名和编号约定 141
10.1.3 经常使用的库 142
10.2 库操作工具 143
10.2.1 理解nm命令 143
10.2.2 理解ar命令 144
10.2.3 理解ldd命令 144
10.2.4 理解ldconfig 145
10.2.5 环境变量和配置文件 145
10.3 编写并使用静态库 146
10.4 编写并使用共享库 151
10.5 使用动态加载的共享对象 152
10.5.1 理解dl接口 152
10.5.2 使用dl接口 154
10.6 小结 155
第2部分 输入、输出、文件和目录
第11章 输入和输出 156
11.1 基本特点和概念 156
11.2 理解文件描述符 160
11.2.1 文件描述符的概念 160
11.2.2 文件描述符的优缺点 161
11.3 使用文件描述符 162
11.3.1 打开关闭文件描述符 162
11.3.2 读写文件描述符 164
11.3.3 使用ftruncate缩短文件 166
11.3.4 使用lseek定位文件指针 166
11.3.5 使用fsync同步到硬盘 167
11.3.6 使用fstat获得文件信息 167
11.3.7 使用fchown改变文件所有权 172
11.3.8 使用fchmod改变文件读写权 172
11.3.9 使用flock和fcntl给文件上锁 172
11.3.10 使用dup和dup2调用 177
11.3.11 使用select同时读写多个文件 179
11.3.12 使用ioctl 182
11.4 小结 182
第12章 文件和目录操作 183
12.1 标准文件函数 183
12.1.1 打开和关闭文件 183
12.1.2 读写文件 184
12.1.3 获得文件状态 185
12.2 输入输出调用 186
12.2.1 格式化输出 186
12.2.2 格式化输入 187
12.2.3 字符输入输出 187
12.2.4 行输入输出 188
12.2.5 文件定位 189
12.2.6 缓冲区控制 189
12.2.7 删除和改名 189
12.2.8 使用临时文件 190
12.3 目录操作 191
12.3.1 找到当前目录 191
12.3.2 改变目录 191
12.3.3 创建和删除目录 191
12.3.4 获得目录列表 192
12.4 特殊的ext2文件系统属性 192
12.5 小结 195
第3部分 进程和同步
第13章 进程控制 196
13.1 linux进程模型 196
13.2 进程属性 196
13.2.1 进程标识号 197
13.2.2 real和effective标识号 198
13.2.3 setuid和setgid程序 198
13.2.4 用户和用户组信息 200
13.2.5 附加的进程信息 201
13.3 创建进程 208
13.3.1 使用system函数 208
13.3.2 fork系统调用 209
13.3.3 exec函数族 211
13.3.4 使用popen函数 213
13.4 控制进程 214
13.4.1 等待进程--wait函数族 214
13.4.2 杀死程序 216
13.5 信号 218
13.5.1 什么是信号 218
13.5.2 发送信号 219
13.5.3 捕获信号 221
13.5.4 检测信号 226
13.6 进程调度 227
13.7 小结 228
第14章 线程概述 229
14.1 什么是线程 229
14.2 __clone函数调用 229
14.3 pthread接口 230
14.3.1 pthread是什么 230
14.3.2 何时使用pthread 231
14.3.3 pthread_create函数 231
14.3.4 pthread_exit函数 231
14.3.5 pthread_ join函数 232
14.3.6 pthread_atfork函数 234
14.3.7 取消线程 234
14.3.8 pthread cleanup宏 237
14.3.9 pthread条件 238
14.3.10 pthread_equal函数 238
14.3.11 线程属性 239
14.3.12 互斥 240
14.4 小结 244
第15章 访问系统信息 245
15.1 进程信息 246
15.1.1 cmdline文件 246
15.1.2 environ文件 246
15.1.3 fd目录 247
15.1.4 mem文件 247
15.1.5 stat 247
15.1.6 status文件 249
15.1.7 cwd符号链接 249
15.1.8 exe符号链接 249
15.1.9 maps文件 249
15.1.10 root符号链接 249
15.1.11 statm文件 249
15.2 一般系统信息 249
15.2.1 /proc/cmdline文件 249
15.2.2 /proc/cpuinfo文件 250
15.2.3 /proc/devices文件 250
15.2.4 /proc/dma文件 250
15.2.5 /proc/file systems文件 250
15.2.6 /proc/interrupts文件 250
15.2.7 /proc/ioports文件 250
15.2.8 /proc/kcore文件 250
15.2.9 /proc/kmsg文件 250
15.2.10 /proc/ksyms文件 251
15.2.11 /proc/loadavg文件 251
15.2.12 /proc/locks文件 251
15.2.13 /proc/mdstat文件 251
15.2.14 /proc/meminfo文件 251
15.2.15 /proc/misc文件 251
15.2.16 /proc/modues文件 251
15.2.17 /proc/mounts文件 251
15.2.18 /proc/pci文件 251
15.2.19 /proc/rtc文件 252
15.2.20 /proc/stat文件 252
15.2.21 /proc/uptime文件 252
15.2.22 /proc/version文件 252
15.2.23 /proc/net子目录 252
15.2.24 /proc/scsi子目录 253
15.2.25 /proc/sys子目录 253
15.3 未来内核中/proc的变化 255
15.4 小结 255
第16章 内存管理 256
16.1 c内存管理回顾 256
16.1.1 malloc函数的使用 256
16.1.2 calloc函数的使用 257
16.1.3 realloc函数的使用 257
16.1.4 free函数的使用 257
16.1.5 alloca函数的使用 258
16.2 内存映像文件 258
16.2.1 mmap函数的使用 259
16.2.2 munmap函数的使用 260
16.2.3 msync函数的使用 260
16.2.4 mprotect函数的使用 260
16.2.5 锁定内存 261
16.2.6 mremap函数的使用 261
16.2.7 用内存映像实现cat命令 261
16.3 发现并修改内存问题 263
16.3.1 一个有问题的程序 263
16.3.2 electric fence 265
16.4 小结 267
第17章 进程间通信 268
17.1 管道 268
17.1.1 打开和关闭管道 269
17.1.2 读写管道 271
17.1.3 更简单的方法 274
17.2 fifo 276
17.2.1 理解fifo 276
17.2.2 创建fifo 278
17.2.3 打开和关闭fifo 279
17.2.4 读写fifo 279
17.3 system v ipc概述 282
17.3.1 system v ipc的主要概念 282
17.3.2 system v ipc的问题 284
17.3.3 linux和system v ipc 285
17.4 共享内存 285
17.4.1 创建共享内存区 286
17.4.2 附加共享内存区 288
17.5 消息队列 291
17.5.1 创建和打开消息队列 291
17.5.2 向队列中写入消息 293
17.5.3 读取队列中的消息 295
17.5.4 删除消息队列 297
17.6 信号灯 299
17.6.1 创建信号灯 299
17.6.2 控制和删除信号灯 301
17.7 小结 303
第18章 守护进程 304
18.1 理解守护进程 304
18.2 创建守护进程 304
18.2.1 函数调用 305
18.2.2 出错处理 308
18.3 和守护进程通信 311
18.3.1 读取配置文件 311
18.3.2 向守护进程加入信号处理功能 314
18.4 小结 319
第4部分 网络编程
第19章 tcp/ip和套接口编程 320
19.1 套接口的定义 320
19.2 通信域 321
19.3 套接口编程基础 321
19.3.1 分配套接口和初始化 321
19.3.2 完成连接的系统调用 323
19.3.3 传送数据 324
19.3.4 关闭 325
19.4 使用套接口的客户机/服务器例子程序 325
19.4.1 服务器的例子程序 326
19.4.2 客户机的例子程序 328
19.4.3 运行客户机和服务器的例子程序 331
19.4.4 使用web浏览器作为客户机运行服务器的例子程序 331
19.5 一个简单的web服务器和web客户机的例子程序 331
19.5.1 实现一个简单的web服务器 332
19.5.2 实现一个简单的web客户机 336
19.5.3 测试web服务器和web客户机 338
19.5.4 使用netscape navigator作为客户机运行简单的web服务器 339
19.6 通过其他编程语言使用套接口 339
19.7 unix域套接口的perl编程 339
19.8 监视套接口活动的工具 341
19.9 小结 342
第20章 udp:用户数据报协议 343
20.1 udp概述 343
20.1.1 udp和tcp的对比 343
20.1.2 tcp的优缺点 343
20.1.3 udp的优缺点 344
20.1.4 选择使用哪一种协议 344
20.2 实现一个基于udp的应用 345
20.2.1 使用udp发送数据 345
20.2.2 接收udp数据 348
20.2.3 最少的出错检查 350
20.2.4 非阻塞i/o 355
20.3 小结 361
第21章 多播套接口和非阻塞i/o 362
21.1 配置linux支持多播ip 362
21.2 为支持多播ip重新编译linux内核 363
21.3 多播ip广播的示例程序 363
21.3.1 使用多播ip广播数据 364
21.3.2 创建客户程序监听多播ip广播 366
21.3.3 运行多播ip示例程序 370
21.4 小结 371
第5部分 用户界面编程
第22章 底层终端控制 372
22.1 终端接口 372
22.2 控制终端 373
22.2.1 属性控制函数 374
22.2.2 速度控制函数 375
22.2.3 行控制函数 376
22.2.4 进程控制函数 377
22.3 使用终端接口 378
22.4 改变终端模式 380
22.5 使用terminfo 382
22.5.1 terminfo能力 382
22.5.2 terminfo编程 383
22.5.3 发挥terminfo能力 387
22.6 小结 390
第23章 ncurses入门 391
23.1 ncurses简史 391
23.2 使用ncurses编译程序 392
23.3 调试ncurses程序 392
23.4 关于窗口 392
23.4.1 ncurses窗口设计 393
23.4.2 ncurses函数命名规则 394
23.5 初始化和终止 395
23.5.1 ncurses初始化结构 395
23.5.2 ncurses终止 395
23.5.3 说明ncurses初始化和终止 396
23.6 输入和输出 398
23.6.1 输出例程 398
23.6.2 输入例程 406
23.7 色彩例程 409
23.8 窗口管理 411
23.9 其他各种工具函数 412
23.10 小结 415
第24章 ncurses高级编程 416
24.1 其他ncurses功能 416
24.1.1 鼠标支持 416
24.1.2 菜单支持 416
24.1.3 窗体支持 416
24.2 和鼠标交互 417
24.2.1 鼠标api概述 417
24.2.2 鼠标控制例程 418
24.2.3 示例程序 419
24.3 使用菜单 422
24.3.1 菜单api概述 422
24.3.2 菜单控制例程 423
24.3.3 示例程序 428
24.4 ncurses窗体 430
24.4.1 窗体api概述 430
24.4.2 窗体管理例程 431
24.4.3 示例程序 440
24.5 小结 441
第25章 x windows编程 442
25.1 x的概念 443
25.2 xlib api 444
25.2.1 xopendisplay 445
25.2.2 xcreatesimplewindow和xcreatewindow 445
25.2.3 映射窗口和撤销映射窗口 446
25.2.4 撤销窗口 447
25.2.5 事件处理 447
25.2.6 初始化图形设备上下文和字体 448
25.2.7 在x窗口中绘图 449
25.2.8 一个xlib的示例程序 449
25.3 x toolkit api 455
25.3.1 x toolkit使用入门 455
25.3.2 使用x工具包设置窗口部件参数 456
25.4 xfree86 458
25.4.1 dpms--显示器电源管理信令
25.4.2 dri--直接显示接口 458
25.4.3 dga--直接图形体系结构 458
25.4.4 xv--x视频 459
25.5 小结 459
第26章 athena、motif和lesstif窗口部件 460
26.1 使用athena的窗口部件 460
26.1.1 athena的标签窗口部件 460
26.1.2 athena的命令按钮窗口部件 461
26.1.3 athena的列表窗口部件 464
26.1.4 athena的文本窗口部件 465
26.1.5 athena的简单菜单窗口部件 468
26.2 使用motif的窗口部件 470
26.2.1 motif的标签窗口部件 471
26.2.2 motif的列表窗口部件 472
26.2.3 motif的文本窗口部件 474
26.3 编写一个定制的athena窗口部件 477
26.3.1 使用fetch_url.c文件 477
26.3.2 使用url.h文件 479
26.3.3 使用urlp.h文件 480
26.3.4 使用url.c文件 481
26.3.5 测试urlwidget 484
26.4 在c++程序中使用athena和motif 485
26.5 使用封装athena窗口部件的一个c++类库 486
26.5.1 component类 487
26.5.2 panewindow类 488
26.5.3 label类 490
26.5.4 button类 491
26.5.5 text类 492
26.6 小结 494
第27章 使用gtk+进行gui编程 495
27.1 gtk+简介 496
27.1.1 在gtk+中处理事件 497
27.1.2 使用gtk+的简短示例程序 498
27.1.3 各种gtk窗口部件 500
27.1.4 gtk容器窗口部件 501
27.2 一个用于显示xml文件的gtk+程序 502
27.2.1 xml简介 502
27.2.2 james clark的xml分析器expat 503
27.2.3 实现gtk+的xml显示程序 504
27.2.4 运行gtk+的xml显示程序 510
27.3 一个使用notebook窗口部件的gui程序 510
27.3.1 notebook窗口部件示例程序的实现 510
27.3.2 实现drawing窗口部件 512
27.3.3 运行gtk notebook窗口部件的示例程序 515
27.4 通过其他编程语言使用gtk+ 515
27.4.1 通过c++使用gtk+ 516
27.4.2 通过perl使用gtk+ 517
27.4.3 通过python使用gtk+ 518
27.5 gtk+的rad工具 518
27.6 小结 519
第28章 使用qt进行gui编程 520
28.1 通过重载qwidget类方法处理事件 521
28.1.1 qwidget类概述 521
28.1.2 实现drawwidget类 523
28.1.3 测试drawwidget 525
28.2 使用qt槽和信号处理事件 526
28.2.1 派生statelcdwidget类 526
28.2.2 使用信号和槽 529
28.2.3 运行信号/槽示例程序 531
28.3 用qt实现xmlview的程序 531
28.3.1 sax2:一个用于xml的简单api 532
28.3.2 dom:文档目标对象 533
28.4 小结 537
第29章 使用opengl和mesa进行3d图形编程 538
29.1 需要为本章准备什么 538
29.2 使用opengl 539
29.3 3d图形编程 539
29.3.1 orbits.c 539
29.3.2 为opengl图形创建窗口并初始化opengl 540
29.3.3 使用glut创建简单的3d对象 541
29.3.4 使用x-y-z坐标在3d空间中放置对象 542
29.3.5 沿着x-、y-、z-中任一坐标轴或所有坐标轴旋转对象 543
29.3.6 启用material属性 544
29.3.7 启用深度测试 545
29.3.8 处理键盘事件 545
29.3.9 为获得动画效果更新opengl图形 545
29.3.10 orbits程序清单 546
29.4 纹理映像 548
29.4.1 用纹理面产生立方体 548
29.4.2 创建纹理映像 549
29.4.3 立方体程序清单 550
29.5 小结 554
第6部分 特殊编程技术
第30章 使用gnu bash进行shell编程 555
30.1 为何使用bash 555
30.2 bash基础知识 555
30.2.1 通配符 556
30.2.2 花括号展开式 556
30.2.3 特殊字符 557
30.3 使用bash变量 558
30.4 使用bash操作符 561
30.4.1 字符串操作符 561
30.4.2 模式匹配操作符 562
30.5 流控制 564
30.5.1 条件执行:if 564
30.5.2 确定性循环:for 568
30.5.3 不确定性循环:while和until 569
30.5.4 选择结构:case和select 569
30.6 shell函数 572
30.7 输入与输出 573
30.7.1 i/o重定向 573
30.7.2 字符串i/o 574
30.8 命令行处理 576
30.9 进程和作业控制 578
30.9.1 shell的信号处理 578
30.9.2 使用trap 578
30.10 小结 580
第31章 设备驱动程序 581
31.1 驱动程序的类型 581
31.1.1 静态链接的内核设备驱动程序 581
31.1.2 可加载的内核模块 582
31.1.3 共享库 582
31.1.4 无特权用户模式程序 582
31.1.5 特权用户模式程序 583
31.1.6 守护进程 583
31.1.7 字符设备与块设备的对比 583
31.2 怎样构造硬件 583
31.2.1 理解步进电机的工作原理 584
31.2.2 标准的或双向的并口 586
31.3 建立开发环境 588
31.4 调试内核级驱动程序 589
31.5 设备驱动程序内幕 589
31.5.1 低层端口的i/o 589
31.5.2 使用dma访问内存 591
31.5.3 引发使用设备驱动程序的中断 591
31.5.4 设备驱动程序分层 592
31.6 简单的用户模式测试驱动程序 593
31.7 创建内核驱动程序 594
31.7.1 查看源代码 594
31.7.2 编译驱动程序 619
31.7.3 使用内核驱动程序 620
31.7.4 未来发展方向 621
31.8 其他信息资源 621
31.9 小结 622
第7部分 补充内容
第32章 软件包管理 623
32.1 理解tar文件 623
32.1.1 创建tar文件 624
32.1.2 更新tar文件 625
32.1.3 列出tar文件的内容 626
32.1.4 从一个存档文件解出文件 627
32.2 理解install命令 628
32.3 理解red hat包管理器(rpm) 630
32.3.1 rpm是什么 630
32.3.2 最小要求 631
32.3.3 配置rpm 631
32.3.4 控制构造过程:使用spec文件 633
32.3.5 分析一个spec文件 634
32.3.6 构造软件包 637
32.4 文件层次结构标准 637
32.5 小结 639
第33章 建档 640
33.1 编写手册页面 640
33.1.1 手册页面的组成 640
33.1.2 手册页面的例子 641
33.1.3 使用groff命令 643
33.1.4 linux约定 644
33.2 使用docbook 645
33.2.1 docbook是什么 646
33.2.2 docbook标记 646
33.2.3 docbook文档示例 647
33.2.4 生成输出 653
33.3 小结 653
第34章 许可证的发放 654
34.1 介绍和弃权 654
34.2 mit/x风格的许可证 654
34.3 bsd风格的许可证 655
34.4 artistic的许可证 656
34.5 gnu通用公共许可证 656
34.5.1 gnu通用公共许可证(gpl)657
34.5.2 gnu库通用公共许可证(lgpl)658
34.6 开发源代码的定义 658
34.7 小结 660
1.1 linux变得成熟了 1
1.1.1 linux的昨天 1
1.1.2 linux的今天 3
1.1.3 linux的明天 3
1.2 为何选择linux编程 3
1.3 每章内容介绍 5
1.3.1 linux编程工具包 5
1.3.2 输入、输出、文件和目录 5
1.3.3 进程和同步 6
1.3.4 网络编程 6
1.3.5 用户界面编程 7
1.3.6 特殊编程技术 8
1.3.7 补充内容 8
1.4 小结 8
第2章 设置开发系统 9
2.1 一般性考虑 9
2.2 主板和cpu 10
2.2.1 板上i/o 12
2.2.2 处理器 12
.2.2.3 bios 13
2.2.4 内存 13
2.2.5 机箱和电源 13
2.3 用户交互硬件:视频、声音、键盘及鼠标 14
2.3.1 显卡 14
2.3.2 显示器 15
2.3.3 声卡 16
2.3.4 键盘及鼠标 16
2.4 通信设备、端口及总线 17
2.4.1 调制解调器 17
2.4.2 网络接口卡 18
2.4.3 scsi 18
2.4.4 usb和火线(ieee1394) 18
2.4.5 串行卡 18
2.4.6 irda 19
2.4.7 pcmcia卡 19
2.4.8 isa即插即用设备 19
2.5 存储设备 19
2.5.1 硬盘 20
2.5.2 可移动磁盘设备 20
2.5.3 cd-rom/dvd 20
2.5.4 磁带备份设备 20
2.6 外围设备 21
2.6.1 打印机 21
2.6.2 扫描仪 21
2.6.3 数字相机 22
2.6.4 家居自动控制设备 22
2.7 完备型系统 22
2.8 便携系统 22
2.9 开发工具软件 23
2.9.1 关键库和头文件 23
2.9.2 调试器 23
2.9.3 编程工具 23
2.9.4 文本编辑器 24
2.10 小结 24
第3章 使用gnu cc 25
3.1 gnu cc特性 25
3.2 教学示例 26
3.3 常用命令行选项 29
3.3.1 函数库和包含文件 30
3.3.2 警告和出错消息选项 31
3.4 优化选项 36
3.5 调试选项 38
3.6 特定体系结构的选项 40
3.7 gnu c扩展 41
3.7.1 关于可移植性 41
3.7.2 gnu扩展 42
3.8 pgcc:奔腾处理器的编译器 45
3.9 小结 45
第4章 使用gnu make管理项目 46
4.1 为何使用make 46
4.2 编写makefile 46
4.3 编写makefile的规则 47
4.3.1 伪目标 49
4.3.2 变量 50
4.3.3 隐式规则 52
4.3.4 模式规则 53
4.3.5 注释 53
4.4 命令行选项和参数 53
4.5 调试make 54
4.6 常见的make出错信息 54
4.7 有用的makefile目标 54
4.8 小结 55
第5章 创建可移植的自配置软件 56
5.1 考虑可移植性 56
5.1.1 什么是程序的可移植性 56
5.1.2 移植性的线索和技巧 57
5.2 理解autoconf 58
5.2.1 创建configure.in 58
5.2.2 构造文件 58
5.2.3 有用的autoconf工具 59
5.3 内置宏 62
5.3.1 候选程序测试 62
5.3.2 库函数测试 63
5.3.3 头文件测试 64
5.3.4 结构测试 64
5.3.5 类型定义测试 64
5.3.6 编译器行为测试 65
5.3.7 系统服务测试 65
5.3.8 unix变体测试 66
5.4 普通宏 66
5.5 一个带注释的autoconf脚本 68
5.6 小结 74
第6章 比较和合并源代码文件 75
6.1 使用diff命令比较文件 75
6.2 理解diff3命令 83
6.3 准备源代码补丁 86
6.3.1 patch的命令行选项 86
6.3.2 创建补丁 87
6.3.3 应用补丁 88
6.4 小结 88
第7章 使用rcs和cvs控制版本 89
7.1 基本术语 89
7.2 使用修订控制系统(rcs) 90
7.2.1 rcs基本用法 90
7.2.2 找出rcs文件间的不同 95
7.2.3 其他rcs命令 98
7.3 使用并发版本系统(cvs) 100
7.3.1 同rcs相比的优点 100
7.3.2 设置cvs 100
7.3.3 检出源代码文件 102
7.3.4 将改动合并进源代码库 103
7.3.5 检查改动 103
7.3.6 添加和删除文件 104
7.3.7 解决文件冲突 105
7.3.8 cvs命令 106
7.3.9 cvs选项 106
7.4 小结 107
第8章 调试 108
8.1 为使用gdb进行编译 108
8.2 使用基本的gdb命令 109
8.2.1 启动gdb 109
8.2.2 在调试器中查看代码 111
8.2.3 检查数据 111
8.2.4 设置断点 113
8.2.5 检查并更改运行中的代码 114
8.3 高级gdb概念和命令 116
8.3.1 变量的作用域和上下文 116
8.3.2 遍历函数堆栈 117
8.3.3 操纵源代码文件 119
8.3.4 与shell进行通信 119
8.3.5 附加到某个运行中的程序 119
8.4 小结 121
第9章 出错处理 122
9.1 出错处理简述 122
9.2 出错处理选项 122
9.3 c语言机制 123
9.3.1 assert宏 123
9.3.2 使用预编译 125
9.3.3 标准库函数 127
9.4 使用系统日志 133
9.4.1 系统日志选项 134
9.4.2 系统日志函数 135
9.4.3 用户程序 138
9.5 小结 139
第10章 使用库 140
10.1 使用编程库 140
10.1.1 库兼容性 140
10.1.2 命名和编号约定 141
10.1.3 经常使用的库 142
10.2 库操作工具 143
10.2.1 理解nm命令 143
10.2.2 理解ar命令 144
10.2.3 理解ldd命令 144
10.2.4 理解ldconfig 145
10.2.5 环境变量和配置文件 145
10.3 编写并使用静态库 146
10.4 编写并使用共享库 151
10.5 使用动态加载的共享对象 152
10.5.1 理解dl接口 152
10.5.2 使用dl接口 154
10.6 小结 155
第2部分 输入、输出、文件和目录
第11章 输入和输出 156
11.1 基本特点和概念 156
11.2 理解文件描述符 160
11.2.1 文件描述符的概念 160
11.2.2 文件描述符的优缺点 161
11.3 使用文件描述符 162
11.3.1 打开关闭文件描述符 162
11.3.2 读写文件描述符 164
11.3.3 使用ftruncate缩短文件 166
11.3.4 使用lseek定位文件指针 166
11.3.5 使用fsync同步到硬盘 167
11.3.6 使用fstat获得文件信息 167
11.3.7 使用fchown改变文件所有权 172
11.3.8 使用fchmod改变文件读写权 172
11.3.9 使用flock和fcntl给文件上锁 172
11.3.10 使用dup和dup2调用 177
11.3.11 使用select同时读写多个文件 179
11.3.12 使用ioctl 182
11.4 小结 182
第12章 文件和目录操作 183
12.1 标准文件函数 183
12.1.1 打开和关闭文件 183
12.1.2 读写文件 184
12.1.3 获得文件状态 185
12.2 输入输出调用 186
12.2.1 格式化输出 186
12.2.2 格式化输入 187
12.2.3 字符输入输出 187
12.2.4 行输入输出 188
12.2.5 文件定位 189
12.2.6 缓冲区控制 189
12.2.7 删除和改名 189
12.2.8 使用临时文件 190
12.3 目录操作 191
12.3.1 找到当前目录 191
12.3.2 改变目录 191
12.3.3 创建和删除目录 191
12.3.4 获得目录列表 192
12.4 特殊的ext2文件系统属性 192
12.5 小结 195
第3部分 进程和同步
第13章 进程控制 196
13.1 linux进程模型 196
13.2 进程属性 196
13.2.1 进程标识号 197
13.2.2 real和effective标识号 198
13.2.3 setuid和setgid程序 198
13.2.4 用户和用户组信息 200
13.2.5 附加的进程信息 201
13.3 创建进程 208
13.3.1 使用system函数 208
13.3.2 fork系统调用 209
13.3.3 exec函数族 211
13.3.4 使用popen函数 213
13.4 控制进程 214
13.4.1 等待进程--wait函数族 214
13.4.2 杀死程序 216
13.5 信号 218
13.5.1 什么是信号 218
13.5.2 发送信号 219
13.5.3 捕获信号 221
13.5.4 检测信号 226
13.6 进程调度 227
13.7 小结 228
第14章 线程概述 229
14.1 什么是线程 229
14.2 __clone函数调用 229
14.3 pthread接口 230
14.3.1 pthread是什么 230
14.3.2 何时使用pthread 231
14.3.3 pthread_create函数 231
14.3.4 pthread_exit函数 231
14.3.5 pthread_ join函数 232
14.3.6 pthread_atfork函数 234
14.3.7 取消线程 234
14.3.8 pthread cleanup宏 237
14.3.9 pthread条件 238
14.3.10 pthread_equal函数 238
14.3.11 线程属性 239
14.3.12 互斥 240
14.4 小结 244
第15章 访问系统信息 245
15.1 进程信息 246
15.1.1 cmdline文件 246
15.1.2 environ文件 246
15.1.3 fd目录 247
15.1.4 mem文件 247
15.1.5 stat 247
15.1.6 status文件 249
15.1.7 cwd符号链接 249
15.1.8 exe符号链接 249
15.1.9 maps文件 249
15.1.10 root符号链接 249
15.1.11 statm文件 249
15.2 一般系统信息 249
15.2.1 /proc/cmdline文件 249
15.2.2 /proc/cpuinfo文件 250
15.2.3 /proc/devices文件 250
15.2.4 /proc/dma文件 250
15.2.5 /proc/file systems文件 250
15.2.6 /proc/interrupts文件 250
15.2.7 /proc/ioports文件 250
15.2.8 /proc/kcore文件 250
15.2.9 /proc/kmsg文件 250
15.2.10 /proc/ksyms文件 251
15.2.11 /proc/loadavg文件 251
15.2.12 /proc/locks文件 251
15.2.13 /proc/mdstat文件 251
15.2.14 /proc/meminfo文件 251
15.2.15 /proc/misc文件 251
15.2.16 /proc/modues文件 251
15.2.17 /proc/mounts文件 251
15.2.18 /proc/pci文件 251
15.2.19 /proc/rtc文件 252
15.2.20 /proc/stat文件 252
15.2.21 /proc/uptime文件 252
15.2.22 /proc/version文件 252
15.2.23 /proc/net子目录 252
15.2.24 /proc/scsi子目录 253
15.2.25 /proc/sys子目录 253
15.3 未来内核中/proc的变化 255
15.4 小结 255
第16章 内存管理 256
16.1 c内存管理回顾 256
16.1.1 malloc函数的使用 256
16.1.2 calloc函数的使用 257
16.1.3 realloc函数的使用 257
16.1.4 free函数的使用 257
16.1.5 alloca函数的使用 258
16.2 内存映像文件 258
16.2.1 mmap函数的使用 259
16.2.2 munmap函数的使用 260
16.2.3 msync函数的使用 260
16.2.4 mprotect函数的使用 260
16.2.5 锁定内存 261
16.2.6 mremap函数的使用 261
16.2.7 用内存映像实现cat命令 261
16.3 发现并修改内存问题 263
16.3.1 一个有问题的程序 263
16.3.2 electric fence 265
16.4 小结 267
第17章 进程间通信 268
17.1 管道 268
17.1.1 打开和关闭管道 269
17.1.2 读写管道 271
17.1.3 更简单的方法 274
17.2 fifo 276
17.2.1 理解fifo 276
17.2.2 创建fifo 278
17.2.3 打开和关闭fifo 279
17.2.4 读写fifo 279
17.3 system v ipc概述 282
17.3.1 system v ipc的主要概念 282
17.3.2 system v ipc的问题 284
17.3.3 linux和system v ipc 285
17.4 共享内存 285
17.4.1 创建共享内存区 286
17.4.2 附加共享内存区 288
17.5 消息队列 291
17.5.1 创建和打开消息队列 291
17.5.2 向队列中写入消息 293
17.5.3 读取队列中的消息 295
17.5.4 删除消息队列 297
17.6 信号灯 299
17.6.1 创建信号灯 299
17.6.2 控制和删除信号灯 301
17.7 小结 303
第18章 守护进程 304
18.1 理解守护进程 304
18.2 创建守护进程 304
18.2.1 函数调用 305
18.2.2 出错处理 308
18.3 和守护进程通信 311
18.3.1 读取配置文件 311
18.3.2 向守护进程加入信号处理功能 314
18.4 小结 319
第4部分 网络编程
第19章 tcp/ip和套接口编程 320
19.1 套接口的定义 320
19.2 通信域 321
19.3 套接口编程基础 321
19.3.1 分配套接口和初始化 321
19.3.2 完成连接的系统调用 323
19.3.3 传送数据 324
19.3.4 关闭 325
19.4 使用套接口的客户机/服务器例子程序 325
19.4.1 服务器的例子程序 326
19.4.2 客户机的例子程序 328
19.4.3 运行客户机和服务器的例子程序 331
19.4.4 使用web浏览器作为客户机运行服务器的例子程序 331
19.5 一个简单的web服务器和web客户机的例子程序 331
19.5.1 实现一个简单的web服务器 332
19.5.2 实现一个简单的web客户机 336
19.5.3 测试web服务器和web客户机 338
19.5.4 使用netscape navigator作为客户机运行简单的web服务器 339
19.6 通过其他编程语言使用套接口 339
19.7 unix域套接口的perl编程 339
19.8 监视套接口活动的工具 341
19.9 小结 342
第20章 udp:用户数据报协议 343
20.1 udp概述 343
20.1.1 udp和tcp的对比 343
20.1.2 tcp的优缺点 343
20.1.3 udp的优缺点 344
20.1.4 选择使用哪一种协议 344
20.2 实现一个基于udp的应用 345
20.2.1 使用udp发送数据 345
20.2.2 接收udp数据 348
20.2.3 最少的出错检查 350
20.2.4 非阻塞i/o 355
20.3 小结 361
第21章 多播套接口和非阻塞i/o 362
21.1 配置linux支持多播ip 362
21.2 为支持多播ip重新编译linux内核 363
21.3 多播ip广播的示例程序 363
21.3.1 使用多播ip广播数据 364
21.3.2 创建客户程序监听多播ip广播 366
21.3.3 运行多播ip示例程序 370
21.4 小结 371
第5部分 用户界面编程
第22章 底层终端控制 372
22.1 终端接口 372
22.2 控制终端 373
22.2.1 属性控制函数 374
22.2.2 速度控制函数 375
22.2.3 行控制函数 376
22.2.4 进程控制函数 377
22.3 使用终端接口 378
22.4 改变终端模式 380
22.5 使用terminfo 382
22.5.1 terminfo能力 382
22.5.2 terminfo编程 383
22.5.3 发挥terminfo能力 387
22.6 小结 390
第23章 ncurses入门 391
23.1 ncurses简史 391
23.2 使用ncurses编译程序 392
23.3 调试ncurses程序 392
23.4 关于窗口 392
23.4.1 ncurses窗口设计 393
23.4.2 ncurses函数命名规则 394
23.5 初始化和终止 395
23.5.1 ncurses初始化结构 395
23.5.2 ncurses终止 395
23.5.3 说明ncurses初始化和终止 396
23.6 输入和输出 398
23.6.1 输出例程 398
23.6.2 输入例程 406
23.7 色彩例程 409
23.8 窗口管理 411
23.9 其他各种工具函数 412
23.10 小结 415
第24章 ncurses高级编程 416
24.1 其他ncurses功能 416
24.1.1 鼠标支持 416
24.1.2 菜单支持 416
24.1.3 窗体支持 416
24.2 和鼠标交互 417
24.2.1 鼠标api概述 417
24.2.2 鼠标控制例程 418
24.2.3 示例程序 419
24.3 使用菜单 422
24.3.1 菜单api概述 422
24.3.2 菜单控制例程 423
24.3.3 示例程序 428
24.4 ncurses窗体 430
24.4.1 窗体api概述 430
24.4.2 窗体管理例程 431
24.4.3 示例程序 440
24.5 小结 441
第25章 x windows编程 442
25.1 x的概念 443
25.2 xlib api 444
25.2.1 xopendisplay 445
25.2.2 xcreatesimplewindow和xcreatewindow 445
25.2.3 映射窗口和撤销映射窗口 446
25.2.4 撤销窗口 447
25.2.5 事件处理 447
25.2.6 初始化图形设备上下文和字体 448
25.2.7 在x窗口中绘图 449
25.2.8 一个xlib的示例程序 449
25.3 x toolkit api 455
25.3.1 x toolkit使用入门 455
25.3.2 使用x工具包设置窗口部件参数 456
25.4 xfree86 458
25.4.1 dpms--显示器电源管理信令
25.4.2 dri--直接显示接口 458
25.4.3 dga--直接图形体系结构 458
25.4.4 xv--x视频 459
25.5 小结 459
第26章 athena、motif和lesstif窗口部件 460
26.1 使用athena的窗口部件 460
26.1.1 athena的标签窗口部件 460
26.1.2 athena的命令按钮窗口部件 461
26.1.3 athena的列表窗口部件 464
26.1.4 athena的文本窗口部件 465
26.1.5 athena的简单菜单窗口部件 468
26.2 使用motif的窗口部件 470
26.2.1 motif的标签窗口部件 471
26.2.2 motif的列表窗口部件 472
26.2.3 motif的文本窗口部件 474
26.3 编写一个定制的athena窗口部件 477
26.3.1 使用fetch_url.c文件 477
26.3.2 使用url.h文件 479
26.3.3 使用urlp.h文件 480
26.3.4 使用url.c文件 481
26.3.5 测试urlwidget 484
26.4 在c++程序中使用athena和motif 485
26.5 使用封装athena窗口部件的一个c++类库 486
26.5.1 component类 487
26.5.2 panewindow类 488
26.5.3 label类 490
26.5.4 button类 491
26.5.5 text类 492
26.6 小结 494
第27章 使用gtk+进行gui编程 495
27.1 gtk+简介 496
27.1.1 在gtk+中处理事件 497
27.1.2 使用gtk+的简短示例程序 498
27.1.3 各种gtk窗口部件 500
27.1.4 gtk容器窗口部件 501
27.2 一个用于显示xml文件的gtk+程序 502
27.2.1 xml简介 502
27.2.2 james clark的xml分析器expat 503
27.2.3 实现gtk+的xml显示程序 504
27.2.4 运行gtk+的xml显示程序 510
27.3 一个使用notebook窗口部件的gui程序 510
27.3.1 notebook窗口部件示例程序的实现 510
27.3.2 实现drawing窗口部件 512
27.3.3 运行gtk notebook窗口部件的示例程序 515
27.4 通过其他编程语言使用gtk+ 515
27.4.1 通过c++使用gtk+ 516
27.4.2 通过perl使用gtk+ 517
27.4.3 通过python使用gtk+ 518
27.5 gtk+的rad工具 518
27.6 小结 519
第28章 使用qt进行gui编程 520
28.1 通过重载qwidget类方法处理事件 521
28.1.1 qwidget类概述 521
28.1.2 实现drawwidget类 523
28.1.3 测试drawwidget 525
28.2 使用qt槽和信号处理事件 526
28.2.1 派生statelcdwidget类 526
28.2.2 使用信号和槽 529
28.2.3 运行信号/槽示例程序 531
28.3 用qt实现xmlview的程序 531
28.3.1 sax2:一个用于xml的简单api 532
28.3.2 dom:文档目标对象 533
28.4 小结 537
第29章 使用opengl和mesa进行3d图形编程 538
29.1 需要为本章准备什么 538
29.2 使用opengl 539
29.3 3d图形编程 539
29.3.1 orbits.c 539
29.3.2 为opengl图形创建窗口并初始化opengl 540
29.3.3 使用glut创建简单的3d对象 541
29.3.4 使用x-y-z坐标在3d空间中放置对象 542
29.3.5 沿着x-、y-、z-中任一坐标轴或所有坐标轴旋转对象 543
29.3.6 启用material属性 544
29.3.7 启用深度测试 545
29.3.8 处理键盘事件 545
29.3.9 为获得动画效果更新opengl图形 545
29.3.10 orbits程序清单 546
29.4 纹理映像 548
29.4.1 用纹理面产生立方体 548
29.4.2 创建纹理映像 549
29.4.3 立方体程序清单 550
29.5 小结 554
第6部分 特殊编程技术
第30章 使用gnu bash进行shell编程 555
30.1 为何使用bash 555
30.2 bash基础知识 555
30.2.1 通配符 556
30.2.2 花括号展开式 556
30.2.3 特殊字符 557
30.3 使用bash变量 558
30.4 使用bash操作符 561
30.4.1 字符串操作符 561
30.4.2 模式匹配操作符 562
30.5 流控制 564
30.5.1 条件执行:if 564
30.5.2 确定性循环:for 568
30.5.3 不确定性循环:while和until 569
30.5.4 选择结构:case和select 569
30.6 shell函数 572
30.7 输入与输出 573
30.7.1 i/o重定向 573
30.7.2 字符串i/o 574
30.8 命令行处理 576
30.9 进程和作业控制 578
30.9.1 shell的信号处理 578
30.9.2 使用trap 578
30.10 小结 580
第31章 设备驱动程序 581
31.1 驱动程序的类型 581
31.1.1 静态链接的内核设备驱动程序 581
31.1.2 可加载的内核模块 582
31.1.3 共享库 582
31.1.4 无特权用户模式程序 582
31.1.5 特权用户模式程序 583
31.1.6 守护进程 583
31.1.7 字符设备与块设备的对比 583
31.2 怎样构造硬件 583
31.2.1 理解步进电机的工作原理 584
31.2.2 标准的或双向的并口 586
31.3 建立开发环境 588
31.4 调试内核级驱动程序 589
31.5 设备驱动程序内幕 589
31.5.1 低层端口的i/o 589
31.5.2 使用dma访问内存 591
31.5.3 引发使用设备驱动程序的中断 591
31.5.4 设备驱动程序分层 592
31.6 简单的用户模式测试驱动程序 593
31.7 创建内核驱动程序 594
31.7.1 查看源代码 594
31.7.2 编译驱动程序 619
31.7.3 使用内核驱动程序 620
31.7.4 未来发展方向 621
31.8 其他信息资源 621
31.9 小结 622
第7部分 补充内容
第32章 软件包管理 623
32.1 理解tar文件 623
32.1.1 创建tar文件 624
32.1.2 更新tar文件 625
32.1.3 列出tar文件的内容 626
32.1.4 从一个存档文件解出文件 627
32.2 理解install命令 628
32.3 理解red hat包管理器(rpm) 630
32.3.1 rpm是什么 630
32.3.2 最小要求 631
32.3.3 配置rpm 631
32.3.4 控制构造过程:使用spec文件 633
32.3.5 分析一个spec文件 634
32.3.6 构造软件包 637
32.4 文件层次结构标准 637
32.5 小结 639
第33章 建档 640
33.1 编写手册页面 640
33.1.1 手册页面的组成 640
33.1.2 手册页面的例子 641
33.1.3 使用groff命令 643
33.1.4 linux约定 644
33.2 使用docbook 645
33.2.1 docbook是什么 646
33.2.2 docbook标记 646
33.2.3 docbook文档示例 647
33.2.4 生成输出 653
33.3 小结 653
第34章 许可证的发放 654
34.1 介绍和弃权 654
34.2 mit/x风格的许可证 654
34.3 bsd风格的许可证 655
34.4 artistic的许可证 656
34.5 gnu通用公共许可证 656
34.5.1 gnu通用公共许可证(gpl)657
34.5.2 gnu库通用公共许可证(lgpl)658
34.6 开发源代码的定义 658
34.7 小结 660
GNU/Linux编程指南:入门·应用·精通
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×