当前位置:首页 > 工业技术
Linux程序设计

Linux程序设计PDF格式文档图书下载

工业技术

图书介绍

序言 1

前言 1

第1章 入门知识 1

1.1 什么是UNIX操作系统 1

1.2 什么是Linux操作系统 1

1.3 发行版本 2

1.4 GNU项目和自由软件基金会 2

1.5 为Linux系统设计程序 3

1.6 UNIX程序 4

1.7 获得帮助 6

1.8 程序开发系统的预备知识 8

1.8.1 程序 8

1.8.2 头文件 8

1.8.3 库文件 9

1.8.4 静态库 10

1.8.5 共享库 12

1.9 UNIX系统中程序设计的特点和原则 13

1.9.1 简单性 13

1.9.2 重点性 13

1.9.3 可反复使用的程序组件 13

1.9.4 过滤器 14

1.9.5 开放的文件格式 14

1.9.6 灵活适应性 14

1.10 本章总结 14

第2章 shell程序设计 15

2.1 什么是shell 16

2.2 管道和重定向 17

2.2.1 对输出数据进行重定向 17

2.2.2 对输入数据进行重定向 18

2.2.3 管道 19

2.3 可以被视为程序设计语言的shell 19

2.3.1 交互式程序 19

2.3.2 编写脚本程序 20

2.3.3 把脚本设置为可执行程序 21

2.4 shell程序设计的语法 23

2.4.1 变量 23

2.4.2 条件测试 26

2.4.3 控制结构 29

2.4.4 函数 39

2.4.5 命令 42

2.4.6 命令的执行 52

2.4.7 即时文档 55

2.4.8 调试脚本程序 57

2.5 shell程序设计示例 58

2.5.1 工作需求 58

2.5.2 设计 58

2.6 本章总结 66

3.1 UNIX的文件结构 67

第3章 如何使用和处理文件 67

3.1.1 目录结构 68

3.1.2 文件和设备 68

3.2 系统调用和设备驱动程序 70

3.3 库函数 70

3.4 文件的底层访问 71

3.4.1 write系统调用 72

3.4.2 read系统调用 72

3.4.3 open系统调用 73

3.4.4 访问权限的初始化值 74

3.4.5 umask变量 75

3.4.6 close系统调用 76

3.4.7 ioctl系统调用 76

3.4.8 其他与文件管理有关的系统调用 78

3.5 标准I/O库 80

3.5.1 fopen函数 81

3.5.4 fclose函数 82

3.5.3 fwrite函数 82

3.5.2 fread函数 82

3.5.5 fflush函数 83

3.5.6 fseek函数 83

3.5.7 fgetc、getc、getchar函数 83

3.5.8 fputc、putc、putchat函数 83

3.5.9 fgets、gets函数 84

3.5.10 格式化输入和输出 84

3.5.11 对数据流进行处理的其他函数 88

3.5.12 文件流错误处理 89

3.5.13 文件流和文件描述符的关系 90

3.6 文件和子目录的维护 90

3.6.1 chmod系统调用 90

3.6.2 chown系统调用 90

3.6.3 unlink、link、symlink系统调用 91

3.6.4 mkdir和rmdir系统调用 91

3.7 扫描子目录 92

3.6.5 chdir系统调用和getcwd函数 92

3.7.1 opendir函数 93

3.7.2 readdir函数 93

3.7.3 telldir函数 93

3.7.4 seekdir函数 93

3.7.5 closedir函数 94

3.8 错误处理 96

3.9 高级论题 97

3.9.1 fcntl系统调用 97

3.9.2 mmap函数 98

3.10 本章总结 100

第4章 UNIX环境 101

4.1 程序参数 101

4.2 环境变量 105

4.2.1 环境变量的用途 107

4.2.2 environ变量 107

4.3 时间与日期 108

4.4 临时文件 114

4.5 用户的个人资料 116

4.6 主机资料 119

4.7 日志记录功能 121

4.8 资源和限制 124

4.9 本章总结 129

第5章 终端 130

5.1 对终端进行读写 130

5.1.1 对重定向输出进行处理 133

5.1.2 与终端进行“对话” 134

5.2 终端驱动程序和通用终端接口 136

5.2.1 概述 136

5.2.2 硬件模型 137

5.3 termios结构 138

5.3.1 输入模式 139

5.3.3 控制模式 140

5.3.2 输出模式 140

5.3.4 本地模式 141

5.3.5 特殊的控制字符 141

5.3.6 终端的速度 144

5.3.7 其他功能函数 145

5.4 终端的输出 148

5.4.1 终端的类型 148

5.4.2 确定终端类型的方法 149

5.4.3 terminfo的使用方法 151

5.5 检测键盘输入 155

5.6 本章总结 158

第6章 curses函数库 159

6.1 使用curses函数库进行编译 159

6.2 基本概念 160

6.3 操作的初始化和结束 163

6.4 向屏幕输出数据 163

6.6 清除屏幕 164

6.5 从屏幕读取输入数据 164

6.7 移动光标 165

6.8 字符的属性 165

6.9 键盘 167

6.9.1 键盘的工作模式 167

6.9.2 键盘输入 168

6.10 窗口 169

6.10.1 WINDOW结构 170

6.10.2 通用化函数 170

6.10.3 移动和刷新窗口 171

6.10.4 优化窗口的刷新操作 174

6.11 子窗口 175

6.12 键盘上的数字小键盘 177

6.13 彩色显示功能 178

6.14 逻辑屏幕和显示平面 181

6.15 CD唱盘管理软件 182

6.16 本章总结 194

第7章 数据管理 196

7.1 内存管理 196

7.1.1 简单的内存分配机制 196

7.1.2 分配大量的内存 197

7.1.3 内存的滥用 200

7.1.4 空指针 201

7.1.5 内存的释放 202

7.1.6 其他内存分配函数 203

7.2 文件封锁 204

7.2.1 创建锁文件 204

7.2.2 文件中的封锁区 207

7.2.3 封锁状态下的读写操作 209

7.2.4 文件封锁的竞争现象 214

7.2.5 其他封锁命令 217

7.2.6 死锁现象 217

7.3.1 dbm数据库 218

7.3 数据库 218

7.3.2 dbm例程 219

7.3.3 dbm数据库的访问函数 220

7.3.4 其他dbm函数 224

7.4 CD唱盘管理软件 225

7.5 本章总结 241

第8章 开发工具 242

8.1 多个源文件带来的问题 242

8.2 make命令和制作文件 243

8.2.1 制作文件的语法 243

8.2.2 make命令的选项和参数 243

8.2.3 制作文件中的注释 246

8.2.4 制作文件中的宏 246

8.2.5 多个制作目标 248

8.2.6 内建规则 250

8.2.7 后缀规则 251

8.2.8 用make命令管理函数库 252

8.2.9 高级论题:制作文件和下级子目录 254

8.2.10 GNU的make和gcc命令 255

8.3 源代码控制系统 256

8.3.1 RCS系统 256

8.3.2 SCCS系统 261

8.3.3 CVS系统 262

8.4 编写使用手册 266

8.5.1 patch程序 269

8.5 软件的发行传播 269

8.5.2 软件发行方面的其他工具 271

8.6 本章总结 273

第9章 调试与纠错 274

9.1 错误的分类 274

9.1.1 功能定义错误 274

9.1.2 设计规划错误 274

9.1.3 代码编写错误 274

9.2.1 一个有漏洞的程序 275

9.2 常用调试技巧 275

9.2.2 代码审查 277

9.2.3 取样法 278

9.2.4 程序的受控执行 280

9.3 用gab进行调试纠错 281

9.3.1 启动gdb 281

9.3.2 运行一个程序 282

9.3.3 堆栈跟踪 282

9.3.4 对变量进行检查 283

9.3.5 列出程序清单 284

9.3.6 设置断点 284

9.3.7 用调试器打补丁 287

9.3.8 深入学习gdb 288

9.4 其他调试工具 288

9.4.1 lint:清理程序中的“垃圾” 289

9.4.2 函数调用工具 290

9.4.3 执行记录 291

9.5 假设验证 292

9.6 内存调试 294

9.6.1 ElectricFence 294

9.6.2 Checker 295

9.7 资源 297

9.8 本章总结 297

第10章 进程与信号 298

10.1 什么是进程 298

10.2 进程的结构 298

10.2.1 进程表 300

10.2.2 查看进程 300

10.2.3 系统进程 301

10.2.4 进程的调度 302

10.3 启动新的进程 303

10.3.1 等待进程 308

10.3.2 僵进程 310

10.3.3 输入和输出重定向 312

10.3.4 线程 313

10.4 信号 313

10.4.1 发送信号 317

10.4.2 信号集 321

10.5 本章总结 325

第11章 POSIX线程 326

11.1 什么是线程 326

11.2 检查有无线程支持 327

11.3 第一个线程程序 329

11.4 同时执行 332

11.5 同步 333

11.5.1 同信号量进行同步 333

11.5.2 用互斥量进行同步 337

11.6 线程的属性 341

11.6.5 scope属性 342

11.6.4 inheritsched属性 342

11.6.1 detachedstate属性 342

11.6.3 schedparam属性 342

11.6.2 schedpolicy属性 342

11.6.6 stacksize属性 343

11.6.7 线程属性--调度 344

11.7 取消一个线程 345

11.8 多线程 348

11.9 本章总结 350

第12章 进程间通信:管道 351

12.1 什么是管道 351

12.2 进程管道 352

12.2.1 popen函数 352

12.2.2 pclose函数 352

12.2.3 把输出送往popen 353

12.3 pipe函数 356

12.4 父进程和子进程 359

12.4.1 管道关闭后的读操作 361

12.4.2 把管道用做标准输入和标准输出 361

12.5 命名管道:FIFO文件 364

12.6 高级论题:以FIFO文件为基础的客户/服务器架构 372

12.7 CD唱盘管理软件 375

12.7.1 目标 376

12.7.2 实现 376

12.7.3 客户接口函数 380

12.7.4 服务器接口 385

12.7.5 管道 389

12.7.6 对CD唱盘管理软件的总结 394

12.8 本章总结 394

第13章 信号量、消息队列和共享内存 395

13.1 信号量 395

13.1.2 一个理论性的例子 396

13.1.1 信号量的定义 396

13.1.3 UNIX中的信号量功能 397

13.1.4 使用信号量 400

13.1.5 信号量总结 403

13.2 共享内存 403

13.2.1 概述 403

13.2.2 共享内存函数 404

13.3.1 概述 409

13.3 消息队列 409

13.2.3 共享内存总结 409

13.3.2 消息队列函数 410

13.3.3 消息队列总结 414

13.4 应用示例 414

13.5 查看IPC功能状态的命令 418

13.5.1 信号量 418

13.5.2 共享内存 418

13.6 本章总结 419

13.5.3 消息队列 419

14.1 什么是套接字 420

14.2 套接字连接 420

第14章 套接字 420

14.2.1 套接字属性 424

14.2.2 创建一个套接字 426

14.2.3 套接字地址 427

14.2.4 给套接字起名字 427

14.2.5 创建套接字队列 428

14.2.6 接受连接 428

14.2.7 请求连接 429

14.2.8 关闭一个套接字 430

14.2.9 套接字通信 430

14.2.10 主机字节顺序和网络字节顺序 432

14.3 网络信息 434

14.3.1 因特网守护进程 438

14.4 多客户 439

14.3.2 套接字选项 439

14.5 select系统调用 442

14.6 本章总结 447

第15章 工具命令语言Tcl 449

15.1 Tcl语言概述 449

15.1.1 第一个Tcl程序 449

15.1.2 Tcl命令 450

15.1.3 变量和值 451

15.1.4 引用和替换 452

15.1.5 计算 455

15.1.6 控制结构 456

15.1.7 错误处理 458

15.1.8 字符串操作 459

15.1.9 数组 464

15.1.10 列表 465

15.1.11 过程 470

15.1.12 输入和输出 471

15.2 一个Tcl程序 474

15.3 创建一个新Tcl语言 477

15.4 Tcl语言的扩展 478

15.4.1 expect 478

15.4.2 [incr Tcl] 478

15.4.3 TclX 478

15.4.4 图形 478

15.5 本章总结 479

第16章 X窗口系统的程序设计 480

16.1 什么是X 480

16.1.1 X服务器 480

16.1.4 X客户 481

16.1.5 X工具包 481

16.1.2 X协议 481

16.1.3 Xlib库 481

16.2 X窗口管理器 482

16.3 X程序设计模型 483

16.3.1 启动 483

16.3.2 主循环 484

16.4 X程序设计概述 485

16.5 Tk工具包 485

16.3.3 退出整理 485

16.5.1 窗口程序设计概述 487

16.5.2 配置文件 488

16.5.3 其他命令 489

16.5.4 Tk素材 489

16.5.5 Tk内建的对话框 515

16.5.6 颜色方案 518

16.5.7 字体 519

16.5.8 绑定 520

16.5.9 bindtags命令 521

16.5.10 几何尺寸管理 523

16.5.11 焦点及其切换 525

16.5.12 选项数据库 527

16.5.13 应用程序间的通信 528

16.5.14 selection命令 528

16.5.15 Clipboard命令 529

16.5.16 窗口管理器 530

16.5.17 动态/静态加载 531

16.5.18 Safe Tk 532

16.6 一个复合素材 533

16.7 使用复合型树素材的应用程序 543

16.8 Tk进程记录查看器 544

16.8.1 国际化 554

16.8.2 业界动态 554

16.9 本章总结 555

17.1 GNOME简介 557

第17章 使用GTK+进行GNOME程序设计 557

17.1.1 GNOME的体系结构 558

17.1.2 GNOME桌面 560

17.1.3 在GNOME里利用GTk+设计程序 560

17.1.4 GNOME应用程序 575

17.2 本章总结 583

第18章 Perl程序设计语言 584

18.1 Perl语言简介 584

18.1.2 Perl语言中的变量 585

18.1.1 “Hello”Perl程序 585

18.1.3 操作符和函数 588

18.1.4 规则表达式 593

18.1.5 控制结构和子例程 596

18.1.6 文件的输入和输出 599

18.2 一个完整的例子 600

18.3 命令行上的Perl 605

18.4.3 perldoc命令 607

18.4.2 安装一个模块 607

18.4.1 CPAN 607

18.4 模块 607

18.4.4 网络功能 608

18.4.5 数据库 609

18.5 改进版CD唱盘数据库 609

18.6 本章总结 613

第19章 因特网程序设计:HTML 614

19.1 什么是World Wide Web 614

19.2 术语 615

19.2.1 超文本传输协议 615

19.2.2 因特网邮件多媒体扩展 615

19.2.3 标准通用置标语言 615

19.2.4 文档类型定义 615

19.2.5 超文本置标语言 615

19.2.8 可扩展超文本置标语言 616

19.2.7 层叠样式表 616

19.2.6 可扩展置标语言 616

19.2.9 统一资源定位器 617

19.2.10 统一资源标识符 617

19.3 一个HTML文档 617

19.4 深入学习HTML 618

19.4.1 HTML标签 620

19.4.2 图像 625

19.4.3 表格 628

19.4.4 锚点或超链接 631

19.4.5 给图像加上锚点 633

19.4.6 非HTML的URL地址 635

19.4.7 链接到其他站点 635

19.5 编写HTML文件 637

19.6 HTML页面服务 638

19.6.1 网络中的HTML文档 638

19.6.2 设置一个服务器 639

19.7.1 服务器端可点击图片 640

19.7 可点击图片 640

19.7.2 客户端可点击图片 641

19.8 服务器端的预处理功能 641

19.9 编写WWW主页的技巧 644

19.10 本章总结 645

第20章 因特网程序设计II:CGI 646

20.1 表单元素 647

20.1.1 FORM标签 647

20.1.2 INPUT标签 647

20.1.3 SELECT标签 649

20.1.4 TEXTAREA标签 650

20.2 一个主页示例 650

20.3 向WWW服务器发送信息 653

20.3.1 对信息进行编码 653

20.3.2 服务器程序 654

20.3.3 编写服务器端的CGI程序 654

20.3.4 使用扩展URL的CGI程序 660

20.3.5 对表单数据进行解码 662

20.4 向客户返回HTML 668

20.5 技巧与窍门 671

20.5.1 确保CGI程序能够退出 671

20.5.2 对客户进行重定向 671

20.5.3 动态图形 671

20.5.4 隐藏上下文信息 672

20.6 一个应用程序 672

20.7 应用Perl语言 678

20.8 本章总结 683

第21章 设备驱动程序 685

21.1 设备 685

21.1.1 设备的分类 686

21.1.2 用户空间与内核空间 687

21.2 字符设备 693

21.3 字符设备驱动程序示例:Schar 695

21.3.2 字符设备的注册 696

21.3.1 MSG宏命令 696

21.3.3 模块的使用计数 697

21.3.4 open和release:设备的打开和关闭 698

21.3.5 文件操作read:从设备读出数据 699

21.3.6 current任务 700

21.3.7 等待队列 700

21.3.8 文件操作write:向设备写入数据 702

21.3.9 非阻塞性读操作 702

21.3.10 查找操作 703

21.3.11 文件操作ioctl:I/O控制 704

21.3.12 检查用户权限 706

21.3.13 文件操作poll:设备对进程的调度 706

21.3.14 模块的参数 709

21.3.15 proc文件系统接口 710

21.3.16 Schar的执行情况 712

21.4 定时和时基:jiffies变量 713

21.3.17 小结 713

21.4.1 短暂延时 715

21.4.2 定时器 715

21.4.3 让出处理器 718

21.4.4 任务队列 719

21.4.5 预定义任务队列 719

21.4.6 小结 721

21.5 内存管理 721

21.5.2 地址空间 722

21.5.1 虚拟内存区 722

21.5.3 内存地址的类型 723

21.5.4 在设备驱动程序里申请内存 723

21.5.5 在用户空间和内核空间之间传递数据 725

21.5.6 简单的内存映射 727

21.5.7 I/O内存 729

21.5.8 IOmap里的设备分配 730

21.5.9 对I/O内存实现mmap文件操作 731

21.6 I/O端口 733

21.6.1 可移植性 734

21.6.2 中断处理 734

21.6.3 IRQ处理器 737

21.6.4 中断的后处理 738

21.6.5 可重入性 739

21.6.6 单独禁止一个中断 740

21.6.7 原子化操作 740

21.6.8 对关键节进行保护 741

21.7 块设备 742

21.7.1 一个简单的RAM盘模块:Radimo 743

21.7.2 介质的更换 745

21.7.3 块设备的ioctl文件操作 746

21.7.4 请求函数:request 746

21.7.5 缓冲区缓存 748

21.8 调试 750

21.7.6 小结 750

21.8.1 Oops追查法 751

21.8.2 对模块进行调试 753

21.8.3 “魔术键” 753

21.8.4 内核调试器--KDB 754

21.8.5 远程调试 754

21.8.6 调试工作中的注意事项 754

21.9.2 字节的存储顺序 755

21.9.1 数据类型 755

21.9 可移植性 755

21.9.3 数据的对齐 756

21.10 本章总结 756

21.11 内核源代码解剖图 757

附录A 可移植性 758

附录B 自由软件基金会和GNU项目 766

附录C 因特网资源 772

附录D 参考书目 779

查看更多关于Linux程序设计的内容

相关书籍
作者其它书籍
返回顶部