图书介绍

GNU/Linux编程指南PDF|Epub|txt|kindle电子书版本网盘下载

GNU/Linux编程指南
  • (美)(K.沃尔)K.Wall等著;王勇等译 著
  • 出版社: 北京:清华大学出版社
  • ISBN:7302039135
  • 出版时间:2000
  • 标注页数:568页
  • 文件大小:35MB
  • 文件页数:592页
  • 主题词:UNIX操作系统-程序设计 程序设计-UNIX操作系统

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

GNU/Linux编程指南PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 概貌1

1.1 Linux既往成就1

1.2 Linux预期成就1

第1部分 Linux编程工具包1

1.3 Linux简史2

1.4 Linux与UNIX2

1.5 Linux编程2

1.6 为何选择Linux编程3

1.7 小结3

第2章 设置开发系统4

2.1 硬件选择4

2.1.1 硬件选择上的考虑4

2.2 处理器/主板5

2.2.1 板上I/O6

2.2.2 处理器6

2.2.4 内存7

2.2.5 机箱和电源7

2.2.3 BIOS7

2.3 用户交互硬件:视频、声音、键盘及鼠标8

2.3.1 显卡8

2.3.2 显示器9

2.3.3 声卡10

2.4 键盘与鼠标10

2.5 通信设备、端口及总线11

2.5.1 调制解调器11

2.5.2 网络接口卡12

2.5.5 串行卡(包括多端口)13

2.5.3 SCSI13

2.5.4 USB与火线(IEEE 1394)13

2.5.6 IRDA14

2.5.7 PCMCIA卡14

2.5.8 ISA即插即用设备14

2.6 存储设备14

2.6.1 硬盘14

2.6.2 可移动磁盘设备14

2.7.1 打印机15

2.7 外围设备15

2.6.3 CD-ROM/DVD15

2.6.4 磁带备份设备15

2.7.2 扫描仪16

2.7.3 数字相机17

2.7.4 家居自动控制设备17

2.8 完备型系统17

2.9 便携系统18

2.10 安装18

2.11 小结21

3.2 使用简介22

第3章 使用GNU cc22

3.1 GNU cc特性22

3.3 常用命令行选项24

3.3.1 函数库和包含文件25

3.3.2 出错检查及警告26

3.4 优化选项27

3.5 调试选项28

3.6 GNU C扩展29

3.7 小结30

4.2 缩写makefile31

第4章 使用GNU make管理项目31

4.1 为何使用make31

4.3 有关makefile编写的详细规则33

4.3.1 伪目标33

4.3.2 变量33

4.3.3 环境变量、自动变量及预定义变量35

4.3.4 隐式规则36

4.3.5 模式规则36

4.5 调试make37

4.4 额外的make命令行选项37

4.3.6 注释37

4.6 常见的make出错消息38

4.7 有用的makefile目标38

4.8 小结38

第5章 使用autoconf创建自配置软件39

5.1 理解autoconf39

5.1.1 创建configure. in文件40

5.1.2 构造文件40

5.2.1 候选程序测试41

32.1 Java简介41

5.2 内置宏41

5.1.3 有用的autoconf实用工具41

5.2.2 库函数测试42

5.2.3 头文件测试43

5.2.4 结构测试44

5.2.5 类型定义测试44

5.2.6 编译器行为测试44

5.2.7 系统服务测试45

5.2.8 UNIX变种测试45

5.3 普通宏46

5.4 一个带注解的autoconf脚本47

5.5 小结52

第6章 比较和归并源文件53

6.1.1 理解cmp命令53

6.1 比较文件53

6.1.2 理解diff命令55

6.1.3 理解diff3命令60

6.1.4 理解sdiff命令63

6.2 准备源代码补丁63

6.2.1 patch命令行选项64

6.2.2 创建补丁64

6.3 小结65

6.2.3 使用补丁65

第7章 使用RCS控制版本66

7.1 术语66

7.2.1 ci和co67

7.2 RCS基本用法67

7.2.2 RCS关键字69

7.2.3 ident命令70

7.3 rcsdiff71

7.4 其他RCS命令73

7.4.4 rcsmerge74

7.4.2 rlog74

7.4.3 rcs74

7.4.1 rcsclean74

7.5 小结75

第8章 在Emacs中创建程序76

8.1 Emacs简介76

8.1.1 启动与停止Emacs76

8.1.2 移动78

8.1.3 插入文本79

8.1.4 删除文本79

8.1.5 查找和替换80

8.1.6 保存和打开文件81

8.1.7 多窗口82

8.2.1 缩进约定83

8.2 支持编程的特性83

8.2.2 语法高亮度显示84

8.2.3 使用注释84

8.2.4 使用Emacs进行编译85

8.2.5 定制简介87

8.3 使用Emacs Lisp自动完成Emacs操作89

8.4 小结91

9.2 使用文件描述符的系统调用92

9.1 文件描述符92

第9章 I/O例程92

第2部分 系统编程92

9.2.1 open()调用93

9.2.2 close()调用94

9.2.3 read()调用94

9.2.4 write()调用94

9.2.5 ioctl()调用94

9.2.6 fcntl()调用95

9.2.7 fsync()调用95

9.2.8 ftruncate()调用96

9.2.9 lseek()调用96

9.2.10 dup()t duo2()调用96

9.2.11 select()调用97

9.2.12 fstat()调用101

9.2.13 fchown()调用102

9.2.14 fchmod()调用102

9.2.15 fchdir()调用103

9.2.16 flock()调用103

9.2.17 pipe()调用103

9.3 文件类型104

9.3.1 普通文件104

9.3.2 磁带I/O106

9.3.3 串口I/O109

9.3.4 打印机接口109

9.3.5 声卡109

9.4 小结109

第10章 文件操作110

10.1 文件操作函数110

10.1.1 打开/关闭文件110

10.1.2 基本的读和写111

10.1.3 状态函数111

10.2 格式化输出112

10.2.1 格式化输入114

10.2.2 基于字符和行的输入输出115

10.2.4 缓冲区控制116

10.2.3 文件定位116

10.2.5 删除和改名117

10.2.6 临时文件117

10.3 小结118

第11章 进程控制119

11.1 进程的属性119

11.2.1 fork()系统调用120

11.2.2 exec()函数族120

11.2 系统调用及库函数120

11.2.3 system()和popen()函数121

11.2.4 clone()函数调用121

11.2.5 wait()、waitpid()、wait3()以及wait4()系统调用122

11.2.6 select()系统调用122

11.2.7 信号122

11.2.8 程序的中止124

11.2.9 闹钟和计时器125

11.3 调度参数126

11.4 线程127

11.4.1 pthread-create()函数128

11.4.2 pthread-exit()函数128

11.4.3 pthread-join()函数128

11.4.4 属性的控制129

11.4.5 pthread-atfork()函数130

11.4.6 取消线程130

11.4.8 pthread-cond-init()函数131

11.4.7 pthread-cleanup-push()宏131

11.4.9 pthread-equal()函数132

11.4.10 互斥132

11.5 编程示例132

11.5.1 子库133

11.5.2 例子child-demol.c程序143

11.5.3 例子程序child-demo2.c145

11.5.4 例子程序child-demo3.c150

11.6 小结151

12.1 进程的信息152

第12章 访问系统信息152

12.1.1 cmdline文件153

12.1.2 environ文件153

12.1.3 fd目录153

12.1.4 mem文件153

12.1.5 stat文件153

12.1.11 statm文件155

12.2.2 /proc/cpuinfo文件155

12.2.1 /proc/cmd/line文件155

12.2 普通的系统信息155

12.1.8 exe符号链接155

12.1.10 root符号链接155

12.1.9 maps文件155

12.1.7 cwd符号链接155

12.1.6 status文件155

12.2.10 /proc/ksyms文件156

12.2.9 /proc/kmsg文件156

12.2.7 /proc/ioports文件156

12.2.8 /proc/kcore文件156

12.2.5 /proc/filesystems文件156

12.2.4 /proc/dma文件156

12.2.3 /proc/devices文件156

12.2.6 /proc/interrupts文件156

12.2.15 /proc/misc文件157

12.2.17 /proc/mounts文件157

12.2.16 /proc/modules文件157

12.2.18 /proc/pci文件157

12.2.14 /proc/meminfo文件157

12.2.13 /proc/mdstat文件157

12.2.12 /proc/locks文件157

12.2.11 /proc/loadavg文件157

12.2.19 /proc/rtc文件158

12.2.20 /proc/stat文件158

12.2.21 /proc/uptime文件158

12.2.22 /proc/version文件158

12.2.23 /proc/net子目录158

12.2.24 /proc/scsi子目录159

12.2.25 /proc/sys目录159

12.3 函数库和实用工具160

12.4 小结160

13.2.1 assert()宏161

第13章 出错处理161

13.2 C语言机制161

13.1 出错处理简述161

13.2.2 使用预编译163

13.2.3 标准库工具165

13.2.4 对错误代码errno的理解165

13.2.5 使用函数abort()166

13.2.6 使用函数exit()166

13.2.7 使用函数atexit()167

13.2.9 使用函数perror()168

13.2.8 使用函数strerror()168

13.3 系统日志工具169

13.3.1 用户程序173

13.4 小结173

第14章 内存管理174

14.1 C内存管理的回顾174

14.1.1 malloc()函数的使用174

14.1.2 calloc()函数的使用174

14.1.5 alloca()函数的使用175

14.1.3 realloc()函数的使用175

14.1.4 free()函数的使用175

14.2 内存映像文件177

14.2.1 mmap()函数的使用177

14.2.2 munmap()函数的使用178

14.2.3 msync()函数的使用178

14.2.4 mprotect()函数的使用179

14.2.5 锁住内存179

14.2.6 mremap()函数的使用179

14.2.7 用内存映像实现cat(1)180

14.3 发现并修改内存管理错误181

14.3.1 一个有问题的程序182

14.3.2 用mpr和check定位内存错误183

14.3.3 Electric Fence185

14.3.4 使用Lint Brush187

14.4 小结188

第3部分 进程间通信和网络编程189

第15章 IPC入门:使用管道189

15.1 管道使用简介190

15.1.1 无名管道190

15.1.2 有名管道191

15.2 小结193

16.1 创建一个使用消息队列示例程序194

第16章 消息队列194

16.2 运行这个消息队列示例程序196

16.3 小结196

第17章 共享内存197

17.1 把Linux配置成使用共享内存197

17.2 创建一个使用共享内存的例子程序197

17.3 运行共享内存示例程序199

17.4 小结200

18.1 使用信号灯的示例程序201

第18章 信号灯201

18.2 运行信号灯示例程序205

18.3 小结206

第19章 TCP/IP和套接口编程207

19.1 支持套接口编程的系统调用207

19.1.1 socket207

19.1.2 bind208

19.1.3 listen209

19.1.4 connect209

19.1.5 recv210

19.1.6 send210

19.2 使用套接口的客户/服务器例子程序211

19.2.1 服务器例子程序211

19.2.2 客户例子程序212

19.2.4 使用Web浏览器作为客户运行服务器例子程序213

19.2.3 运行客户和服务器例子程序213

19.3 一个简单的Web服务器程序和Web客户程序214

19.3.1 实现一个简单的Web服务器程序214

19.3.2 实现一个简单的Web客户程序216

19.3.3 测试这个Web服务器程序和Web客户程序216

19.3.4 使用Netscape Navigator作为客户运行这个简单Web服务器程序217

19.4 小结218

第20章 UDP:用户数据协议219

20.1 一个发送UDP数据的例子程序219

20.2 一个接收UDP数据的例子程序220

20.3 运行这两个UDP例子程序221

20.4 小结222

第21章 使用多播套接口223

21.1 把Linux配置成支持多播IP223

21.2 几个使用多播IP的例子程序224

21.2.1 使用多播IP广播数据的例子程序225

21.2.2 监听多播IP广播的例子程序226

21.2.3 运行这两个多播IP例子程序227

21.3 小结228

第22章 非阻塞套接口I/O229

22.1 使用非阻塞套接口I/O的例子程序229

22.2 运行这个非阻塞套接口I/O的例子程序232

22.3 小结232

23.1.1 理解客户程序的设计233

23.1 C++客户/服务器类的设计233

第23章 用于TCP套接口的一个C++类库233

23.1.2 理解服务器设计235

23.2 C++客户/服务器类的实现236

23.2.1 实现客户程序236

23.2.2 实现服务器237

23.3 测试这个客户/服务器类238

23.4 小结240

第24章 使用库241

24.1 比较libc5和libc6241

24.2.2 理解ar命令242

24.2.1 理解nm命令242

24.2 库操作工具242

24.2.4 理解ldconfig243

24.2.3 理解ldd命令243

24.2.5 环境变量和配置文件244

24.3 编写并使用静态库244

24.4 编写并使用享库249

24.5 使用动态加载的共享对象251

24.5.1 理解dl接口251

24.5.2 加载共享对象251

24.5.6 使用dl接口252

24.5.4 检查错误252

24.5.5 卸载共享对象252

24.5.3 使用共享对象252

24.6 小结254

第25章 设备驱动程序255

25.1 驱动程序类型255

25.1.1 静态链接的内核设备驱动程序255

25.1.2 可加载的内核模块255

25.1.5 特权用户模式程序256

25.1.4 无特权用户模式程序256

25.1.3 共享库256

25.2 演示用的硬件257

25.1.6 守护进程257

25.1.7 字符设备与块设备257

25.2.1 步进电机工作原理258

25.2.2 标准或双向并口260

25.3 开发配置262

25.4 低层端口I/O262

25.5 引发使用设备驱动程序的中断264

25.7 一个简单的用户模式测试驱动程序265

25.6 使用DMA访问内存265

25.8 调试内核级驱动程序266

25.9 下半部与上半部267

25.10 创建一个内核驱动程序267

25.10.1 查看源代码267

25.10.2 编译驱动程序291

25.10.3 使用内核驱动程序291

25.10.4 未来发展方向292

25.12 小结293

25.11 其他信息来源293

第26章 底层终端控制294

26.1 终端接口294

第4部分 用户界面编程294

26.2 控制终端295

26.2.1 属性控制函数296

26.2.2 速度控制函数297

26.2.3 行控制函数297

26.2.4 进程控制函数298

26.3 使用终端接口299

26.4 改变终端模式301

26.5.1 terminfo能力303

26.5 使用terminfo303

26.5.2 使用terminfo304

26.5.3 发挥terminfo能力307

26.6 小结310

第27章 使用ncurses操纵屏幕311

27.1 ncurses简史311

27.2 使用ncurses编译程序312

27.3 调试ncurses程序312

27.4 关于窗口312

27.4.1 ncurses的窗口设计313

27.4.2 ncurses的函数命名约定314

27.5.2 ncurses终止315

27.5 初始化与终止315

27.5.1 ncurses初始化结构315

27.5.3 说明ncurses的初始化与终止316

27.6 输入与输出318

27.6.1 输出例程318

27.6.2 输入例程326

27.7 颜色例程329

27.8 窗口管理331

27.9 其他实用函数331

27.10 小结334

第28章 X Window编程335

28.1 X的概念335

28.2 Xlib API336

28.2.1 XopenDisplay337

28.2.2 XcreateSimpleWindow和XcreateWindow337

28.2.5 事件处理338

28.2.4 撤消窗口338

28.2.3 映射窗口和撤消映射窗口338

28.2.6 初始化图形设备上下文和字体340

28.2.7 在X窗口中绘图340

28.2.8 一个Xlib的示例程序341

28.3 X工具包API344

28.3.1 准备使用X工具包344

28.3.2 使用X工具包设置窗口部件参数345

28.4 小结346

第29章 使用Athena和Motif的窗口部件347

29.1.1 Athena的标签窗口部件347

29.1 使用Athena的窗口部件347

29.1.2 Athena的命令按钮窗口部件348

29.1.3 Athena的列表窗口部件351

29.1.4 Athena的文本窗口部件352

29.1.5 Athena的简单菜单窗口部件355

29.2 使用Motif的窗口部件357

29.2.1 Motif的标签窗口部件358

29.2.2 Motif的列表窗口部件359

29.2.3 Motif的文本窗口部件360

29.3.1 使用fetch-url.c文件363

29.3 编写一个定制的Athena窗口部件363

29.3.2 使用URL.h文件365

29.3.3 使用URLP.h文件366

29.3.4 使用URL.c文件367

29.3.5 测试URL窗口部件369

29.4 在C++程序中同时使用Athena和Motif370

29.5 使用封装Athena窗口部件的一个C++类库371

29.5.1 Conmponent类372

29.5.2 PanedWindow类373

29.5.3 Label类375

29.5.4 Button类376

29.5.5 Text类377

29.6 小结379

第30章 使用GTK进行GUI编程380

30.1 GTK简介381

30.1.1 处理GTK中的事件382

30.1.2 使用GTK的示例程序383

30.1.4 GTK容器窗口部件385

30.1.3 其他GTK窗口部件385

30.2 用于显示XML文件的GTK程序386

30.2.1 XML简介387

30.2.2 James Clark的XML分析器Expat388

30.2.3 GTK的XML显示程序实现389

30.2.4 运行GTK的XML显示程序394

30.3 使用Notebook窗口部件的GUI程序394

30.3.1 Notebook窗口部件示例程序的实现394

30.3.2 实现绘图窗口部件396

30.3.3 运行GTK Notebook窗口部件示例程序398

第31章 使用Qt进行GUI编程400

31.1 通过重载QWidget类方法处理事件401

31.1.1 QWindget类概述401

31.1.2 实现DrawWidget类403

31.1.3 测试DrawWidget405

31.2 使用Qt槽和信号处理事件405

31.2.1 派生StateLCDWidget类406

31.2.2 使用信号和槽408

31.3 小结410

31.2.3 运行信号/槽示例程序410

第32章 使用Java进行GUI编程412

32.1.1 Java是一种面向对象的语言412

32.1.2 在Java中使用包415

32.1.3 使用java读写文件416

32.1.4 在Java中使用多个线程419

32.1.5 在Java中进行套接口编程420

32.2 使用Java编写一个聊天引擎424

32.3 AWT简介428

32.4 使用AWT编写一个聊天程序430

32.5 JFC简介434

32.6 使用JFC编写一个聊天程序437

32.7 使用本机Java编译器440

32.8 小结440

第33章 OpenGL/Mesa图形编程441

33.1 OpenGL是一个图形硬件的软件接口441

33.2 Orbits示例程序442

33.2.1 为OpenGL图形创建窗口以及对OpenGL初始化442

33.2.2 使用GLUT创建简单的三维物体443

33.2.4 沿着X-,Y-,Z-中的任何轴或所有轴旋转物体445

33.2.3 在三维空间中使用X-Y-Z坐标放置物体445

33.2.5 启用材料属性446

33.2.6 启用深度值测试447

33.2.7 处理键盘事件447

33.2.8 为获得动画效果对OpenGL图形进行更新447

33.2.9 示例程序清单447

34.2 bash基础知识451

34.2.1 通配符451

第34章 使用GNU bash进行Shell编程451

34.1 为何使用bash451

第5部分 特殊编程技术451

34.2.2 花括弧展开式452

34.2.3 特殊字符452

34.3 使用bash变量453

34.4 使用bash操作符455

34.4.1 字符串操作符456

34.4.2 模式匹配操作符457

34.5.1 条件执行:if458

34.5 流控制458

34.5.2 确定性循环:for462

34.5.3 非确定性循环:while和until462

34.5.4 选择结构:case和select463

34.6 shell函数465

34.7 输入与输出466

34.7.1 I/O重定向466

34.7.2 字符串I/O467

34.8 命令行处理469

34.9 进程和作业控制471

34.9.1 shell的信号处理471

34.9.2 使用trap471

34.10 小结473

第35章 有关安全性的编程474

35.1 应用程序类型474

35.1.1 setuid程序474

35.1.2 网络服务器(守护进程)474

35.1.6 工具程序475

35.1.5 CGI程序475

35.1.4 邮件用户代理程序475

35.1.3 网络客户程序475

35.1.7 应用程序476

35.2 特殊的代码问题476

35.2.1 shell脚本和system()系统调用476

35.2.2 来自不信任用户的输入477

35.2.3 缓冲区溢出477

35.2.4 环境变量480

35.2.5 gethostbyname()函数482

35.2.6 信号482

35.2.7 user ID和group ID483

35.2.8 函数库的脆弱性485

35.2.9 执行其他程序485

35.2.10 /tmp竞争485

35.2.11 拒绝服务型攻击485

35.2.12 随机数487

35.2.13 令牌487

35.2.14 密码487

35.2.15 文件名488

35.2.16 符号链接489

35.2.17 chroot()环境498

35.2.19 进程间通信499

35.2.18 分割程序499

35.2.20 identd守护进程500

35.2.21 TCP与UDP500

35.2.22 动态与静态内存分配501

35.2.23 安全级别502

35.2.24 POSIX.le的能力502

35.3 擦除缓冲区502

35.4 穿越防火墙提交HTML表单502

35.7 预先派生子进程的服务器的问题503

35.6 HTML服务器包含特性503

35.5 窃呼、盗取及中间人攻击503

35.8 超时504

35.9 三因素认证504

35.10 可插入的认证模块505

35.11 一般的程序健壮性问题505

35.12 加密技术505

35.12.1 加密算法的类型506

35.12.2 加密系统507

35.12.3 加密的脆弱性507

35.13 小结508

第36章 调试:GNU gdb509

36.1 为使用gdb进行编译509

36.2 使用基本的gdb命令509

36.2.1 启动gdb510

36.2.2 在调试器中查看代码511

36.2.3 检查数据512

36.2.4 设置断点513

36.2.5 检查并更改运行中的代码515

36.3.1 变量的作用域和上下文516

36.3 高级gdb概念和命令516

36.3.2 遍历函数调用栈517

36.3.3 操纵源文件518

36.3.4 与Shell进行通信519

36.3.5 附加到某个运行中的程序520

36.4 小结520

第6部分 补充内容521

第37章 软件包管理521

37.1 理解tar文件521

37.1.1 创建tar文件522

37.2 理解install命令523

37.1.3 列出tar文件的内容523

37.1.2 更新tar文件523

37.3 理解Red Hat软件包管理器525

37.3.1 最小要求526

37.3.2 配置RPM526

37.3.3 控制构造过程:使用spec文件527

37.3.4 分析一个spec文件528

37.3.5 构造软件包530

37.4 小结531

38.1.1 手册页面的组成532

38.1.2 手册页面例子及解释532

38.1 手册页面532

第38章 建档532

38.1.3 使用groff命令534

38.1.4 Linux约定535

38.2 使用SGML工具创建SGML文档536

38.2.1 SGML工具537

38.2.2 SGML工具的标记540

38.2.3 格式化SGML文档541

38.3 小结541

39.1 MIT/X风格的许可证542

第39章 许可证的发放542

39.3 Artistic许可证543

39.2 BSD风格的许可证543

39.4 GNU通用公共许可证544

39.4.1 GNU通用公共许可证(GPL)544

39.4.2 GNU库通用公共许可证(LGPL)545

39.5 开放源代码的定义546

39.6 选择正确的许可证547

附录A 符号表函数库548

A.1 可用的文档548

第7部分 附录548

A.1.1 示例程序:userchange549

A.1.2 定义一个符号表来描述一个结构类型549

A.1.3 定义一个变量的随机集551

A.1.4 包含另一个符号表553

A.1.5 出错报告554

A.1.6 智能指针555

A.1.7 符号表库函数555

A.1.8 执行例子560

附录B GNU通用公共许可证(General Public License)562

热门推荐