网上购物 货比三家
您现在的位置:快乐比价网 > 图书 > 计算机与网络 > 操作系统 > 商品详情

Linux应用程序开发(第2版)

分享到:
Linux应用程序开发(第2版)

最 低 价:¥44.30

定 价:¥0.00

作 者:(美)Michael K.Johnson,Erik W. Troan

出 版 社:电子工业出版社

出版时间:2005 年11月

I S B N:7121017954

价格
缺货
价格
44.30元
价格
46.60元
价格
47.20元
价格
53.10元

商品详情

编辑推荐

“本书的第一版总是放在我桌上举手可及的地方,因为它非常好地解释了Linux用户态API的所有领域。而第二版更为出色,我即将用它来取代第一版。”
   Greg Kroah-Hartman
   著名的Linux内核程序员
   《Linux应用程序开发(第二版)》是一本出色的参考书籍,适合各个层次的Linux程序员,也包括从其他操作系统转行的C程序员。在备受好评的第一版的基础上,Linux程序员的两位领军人物,Michael K.Johnson和Erik W.Troan系统地介绍了创建鲁棒的、安全的、高效的软件,以及移植现有代码到Linux所发掌握的关健API和技术。
   本书针对Linux2.6内核、GNU C库2.3版、最新的POSIX标准,以及单一Unix规范第6期,在第一版的基础上做了全部的更正。它覆盖了Linux所特有的扩展和特性,帮助你最大程度地发挥当今Linux的强大功能。同时,其他开发人员可分享作者在从事最新的Liunx发行版的工作中所获得的思想、技巧、窍门。另外,这些更正也适用于任何版本的Unix。
   涉及主题:
   ·Linux开发:理解什么是操作系统、许可以及文档。
   ·开发环境:编译器、链接器和装载器、以及调试工具。
   ·系统编程:进程模型、文件处理、信号处理、目录操作以及作业控制。
   ·终端、socker、定时器、虚拟终端、Linux控制台。
   ·开发库:字符串匹配、终端处理、命令行解析、认证以及其他。
   ·大量的可下载的代码范例。
   本版新内容:
   ·GNU C库(glibc),底层的标准,一些测试用的宏。
   ·编写安全的Linux程序,系统守护进程,实用程序。
   ·对内存调试的范围进行了重要的扩展,包括Valgrind和mpr。
   ·对涉及正则表达式的部分进行了重要改进。
   ·涵盖了IPv6网络,包括IPv6和IPv4交互使用的新系统库接口。
   ·涵盖了strace,itrace,实时信号,poll和epoll系统调用,popl库改进,可挂接认证模块(PAM),qdbm等。
   ·改进了索引和词汇表,并且对示例代码加上了行号。

内容简介

本书介绍了linux环境下进行应用程序开发需要掌握的知识,对许多编程实践中经常遇到的内容进行了详细的讲解,并且提供了典型的实例加以说明。
  全书分为四个部分。第1部分是初学者需要了解的知识,包括linux的历史、从事自由软件开发需要了解的版权知识和gpl等许可证,以及如何获取和使用在线文档系统。第2部分介绍了开发环境和工具。其中包括vi,emacs编辑器,gdb调试器的使用,gcc的选项和扩展,gnu c库的基本知识,内存溢出和泄漏的调试工具,如何创建、使用、管理静态库和动态库,以及如何通过系统调用请求系统服务。第3部分详细介绍了linux系统编程知识。其中包括进程模型,简单文件管理,信号处理,高级文件操作,目录操作,作业控制,终端与伪终端,socket网络,时间和定时器,随机数,虚拟控制台,linux控制台,以及如何编写安全的程序。第4部分精选了linux编程中最常用的开发库进行介绍。其中包括字符串匹配,用于终端编程的s-lang库,基于散列的数据库函数库,命令行解析库,如何运行时动态加载共享对象,以及有关用户身份识别和验证的库。
  本书内容丰富、实用,语言通俗,不仅适合初学者学习,也适合熟悉unix环境编程的高级开发人员参考。

作者简介

Michael K.Johnson是Specifix的操作系统工程师。他曾是RedHat的操作系统开发人员,在那里他管理一个内核开发小组长达3年半,是Fedora项目基础技术的领导。他也曾做过有关Linux应用程序开发的全日制的教学工作。.
Erik W.Troan是Specifix的操作系统的合伙创始人和执行副总裁。他曾经是Red Hat产品工程部的副总裁,负责规格描述和创建技术,例如RPM、Linux操作系统、Red Hat网络、高性能服务器以及Red Hat网站的基础设施。...
.. << 查看详细

目录

第1部分 起步
第1章 linux的发展历史2
1.1 自由unix软件简史3
1.2 linux的发展4
1.3 unix系统的概念谱系5
1.4 linux谱系7
第2章 许可证和版权8
2.1 版权8
2.2 许可10
2.3 自由软件许可证10
2.3.1 gnu通用公共许可证11
2.3.2 gnu库通用公共许可证12
2.3.3 mit/x/bsd风格的许可证12
2.3.4 旧bsd风格的许可证12
2.3.5 艺术许可证12
2.3.6 许可证的不兼容性13
第3章 在线系统文档14
3.1 man手册页14
3.2 info手册页15
3.3 其他文档15
.第2部分 开发工具和环境
第4章 开发工具18
4.1 编辑器19
4.1.1 emacs20
4.1.2 vi21
4.2 make21
4.2.1 复杂命令行24
4.2.2 变量25
4.2.3 后缀规则26
4.3 gnu的调试器27
4.4 跟踪程序行为31
第5章 gcc的选项和扩展33
5.1 gcc选项33
5.2 头文件36
5.2.1 long long36
5.2.2 内嵌函数36
5.2.3 可选择的扩展关键字36
5.2.4 特征37
第6章 gnc的c语言库38
6.1 特征选择38
6.2 posix接口40
6.2.1 posix要求的类型40
6.2.2 发现运行时的权能42
6.2.3 查找和设置基本系统信息43
6.3 兼容性45
第7章 内存调试工具46
7.1 存在bug的代码46
7.2 glibc的内存检查工具48
7.2.1 发现内存堆的损坏49
7.2.2 使用mtrace()来跟踪分配情况52
7.3 利用mpr找到内存泄露53
7.4 利用valgrind发现内存错误55
7.5 电网60
7.5.1 使用电网61
7.5.2 内存对齐61
7.5.3 其他特性63
7.5.4 局限性63
7.5.5 资源消耗63
第8章 创建和使用库65
8.1 静态库65
8.2 共享库66
8.3 设计共享库67
8.3.1 管理兼容性67
8.3.2 不兼容的库68
8.3.3 设计兼容的库68
8.4 构造共享库69
8.5 安装共享库70
例子71
8.6 使用共享库72
8.6.1 使用无须安装的库73
8.6.2 提前装载库73
第9章 linux系统环境75
9.1 进程环境75
9.2 理解系统调用76
9.2.1 系统调用的限制77
9.2.2 系统调用的返回码77
9.2.3 使用系统调用79
9.2.4 通用错误返回码80
9.3 查找头文件和库文件85
第3部分 系统编程
第10章 进程模型88
10.1 定义进程88
10.1.1 使用线程的复杂性88
10.1.2 linux的方式89
10.2 进程属性89
10.2.1 pid及其生成89
10.2.2 信用状90
10.2.3 文件系统用户标识符94
10.2.4 关于uid和gid的总结95
10.3 进程信息96
10.3.1 程序参数97
10.3.2 资源的使用98
10.3.3 建立使用限制100
10.4 进程基本元素101
10.4.1 创建子进程102
10.4.2 等待子进程结束103
10.4.3 运行新程序104
10.4.4 用vfork()更快速地创建进程106
10.4.5 自我终止107
10.4.6 终止其他进程107
10.4.7 转储内核文件信息109
10.5 简单子进程109
10.5.1 用system()运行和等待109
10.5.2 从进程读或写110
10.6 会话和进程组112
10.6.1 会话113
10.6.2 控制终端113
10.6.3 进程组113
10.6.4 孤儿进程组114
10.7 介绍ladsh115
用ladsh运行外部程序116
10.8 创建克隆129
第11章 简单的文件管理130
11.1 文件模式132
11.1.1 文件访问权限133
11.1.2 文件权限修饰符134
11.1.3 文件类型136
11.1.4 进程的umask137
11.2 基本的文件操作138
11.2.1 文件描述符138
11.2.2 关闭文件139
11.2.3 在文件系统中打开文件139
11.2.4 文件的读、写以及位置
11.2.4 指针的移动141
11.2.5 局部读和写145
11.2.6 缩短文件147
11.2.7 同步文件147
11.2.8 其他操作148
11.3 查询和修改inode信息149
11.3.1 查找inode信息149
11.3.2 一个使用stat()的简单示例150
11.3.3 轻松确定访问权限152
11.3.4 改变文件的访问权限153
11.3.5 改变文件的所有者和组153
11.3.6 改变文件的时间戳154
11.3.7 ext3扩展属性155
11.4 操作目录项159
11.4.1 创建设备文件以及命名管道的目录项160
11.4.2 创建硬链接162
11.4.3 使用符号链接163
11.4.4 删除文件164
11.4.5 重命名文件164
11.5 操作文件描述符165
11.5.1 改变打开文件的访问模式165
11.5.2 修改close-on-exec标志166
11.5.3 复制文件描述符166
11.6 创建无名管道167
11.7 对ladsh添加重定向168
11.7.1 数据结构168
11.7.2 修改代码169
第12章 信号处理172
12.1 信号的概念173
12.1.1 信号的生命周期173
12.1.2 简单信号173
12.1.3 可靠信号175
12.1.4 信号和系统调用176
12.2 linux(和posix)信号系统的api177
12.2.1 发送信号177
12.2.2 使用sigset_t178
12.2.3 捕捉信号178
12.2.4 操作一个进程的信号掩码180
12.2.5 找到等待信号的集合182
12.2.6 等待信号182
12.3 有效信号183
描述信号187
12.4 编写信号处理程序188
12.5 重新打开日志文件190
12.6 实时信号193
信号队列和排序193
12.7 获取信号的信息196
12.7.1 得到一个信号的上下文196
12.7.2 使用信号发送数据202
第13章 高级文件操作205
13.1 多路输入输出205
13.1.1 非阻塞i/o208
13.1.2 用poll()的多路传输209
13.1.3 使用select()的多路传输213
13.1.4 比较poll()和select()217
13.1.5 使用epoll进行多路传输220
13.1.6 比较poll()和epoll225
13.2 内存映射229
13.2.1 页对齐230
13.2.2 建立内存映射230
13.2.3 撤销映射区域235
13.2.4 同步内存区域到磁盘235
13.2.5 锁定内存区域236
13.3 文件锁定237
13.3.1 文件锁238
13.3.2 记录锁239
13.3.3 强制锁245
13.3.4 租赁文件245
13.4 read()和write()的替代方法249
13.4.1 分散/聚集的读和写249
13.4.2 忽略文件指针251
第14章 目录操作253
14.1 当前工作目录253
14.1.1 查找当前工作目录253
14.1.2 特殊文件“.”和“..”255
14.1.3 当前目录255
14.2 改变根目录256
14.3 创建和删除目录256
14.3.1 创建新目录256
14.3.2 删除目录257
14.4 读取目录的内容257
再次读取目录内容259
14.5 文件名匹配搜索259
14.5.1 使用子进程260
14.5.2 内在匹配搜索261
14.6 为ladsh增加目录和匹配功能265
14.6.1 增加cd和pwd266
14.6.2 增加文件名匹配查询267
14.7 遍历文件系统的树结构270
14.7.1 使用ftw()270
14.7.2 用nftw()函数进行文件树遍历272
14.7.3 实现find功能274
14.8 目录变更提示276
第15章 作业控制284
15.1 作业控制基础284
15.1.1 重新启动进程284
15.1.2 停止进程285
15.1.3 处理作业控制信号285
15.2 ladsh中的作业控制287
第16章 终端与伪终端293
16.1 tty操作294
16.1.1 终端实用函数294
16.1.2 控制终端295
16.1.3 终端所有权296
16.1.4 用utemper工具进行记录297
16.1.5 手工记录298
16.2 termios概述308
16.3 termios实例309
16.3.1 密码309
16.3.2 串行通信311
16.4 termios调试325
16.5 termios参考326
16.5.1 函数327
16.5.2 窗口尺寸330
16.5.3 标志位331
16.5.4 输入模式标记332
16.5.5 输出模式标记334
16.5.6 控制模式标记335
16.5.7 控制模式字符336
16.5.8 本地模式标记338
16.5.9 控制read()340
16.6 伪终端341
16.6.1 打开伪终端342
16.6.2 打开伪终端的简单方法343
16.6.3 打开伪终端的复杂方法344
16.6.4 伪终端范例348
第17章 socket网络358
17.1 协议支持358
17.1.1 理想的网络358
17.1.2 实际的网络359
17.1.3 让实际的网络变得理想360
17.1.4 地址360
17.2 实用函数361
17.3 基本套接字操作362
17.3.1 建立一个套接字362
17.3.2 建立连接364
17.3.3 将地址绑定到套接字364
17.3.4 等待连接364
17.3.5 连接到一个服务器365
17.3.6 找到连接地址366
17.4 unix域套接字367
17.4.1 unix域地址367
17.4.2 等待一个连接368
17.4.3 连接到一个服务器370
17.4.4 运行unix域的示例371
17.4.5 未命名的unix域套接字371
17.4.6 传递文件描述符372
17.5 基于tcp/ip协议的联网机器377
17.5.1 字节存储顺序377
17.5.2 ipv4地址378
17.5.3 ipv6地址380
17.5.4 ip地址的操作382
17.5.5 转换名称到地址384
17.5.6 转换地址到名称395
17.5.7 监听tcp连接400
17.5.8 tcp客户端应用程序403
17.6 使用udp数据报404
17.6.1 创建一个udp套接字405
17.6.2 发送和接收数据报406
17.6.3 一个简单的tftp服务器407
17.7 套接字错误413
17.8 旧的网络函数415
17.8.1 ipv4地址操作415
17.8.2 主机名解析417
17.8.3 旧的主机信息查找范例418
17.8.4 查找端口号420
第18章 时间423
18.1 获取时间和日期423
18.1.1 时间和日期的表示423
18.1.2 时间的转换,格式化和解析426
18.1.3 时间的限制429
18.2 使用计时器431
18.2.1 休眠431
18.2.2 间隔计时器432
第19章 随机数436
19.1 伪随机数436
19.2 密码系统和随机数437
第20章 虚拟控制台编程439
20.1 起步440
20.2 发出峰鸣声442
20.3 判断终端是否为虚拟控制台443
20.4 查找当前虚拟控制台443
20.5 管理虚拟控制台的切换444
20.6 范例:open命令447
第21章 linux控制台449
21.1 权能数据库450
21.2 图标,字符和映射451
21.3 linux控制台权能452
21.3.1 控制字符453
21.3.2 转义字符序列454
21.3.3 测试序列455
21.3.4 复杂转义字符序列456
21.4 直接写屏幕461
第22章 编写安全程序464
22.1 安全何时重要464
安全何时失效465
22.2 最小化攻击时机466
22.2.1 放弃权限466
22.2.2 采用辅助手段467
22.2.3 限制文件系统的访问468
22.3 常见的安全漏洞469
22.3.1 缓冲区溢出469
22.3.2 解析文件名474
22.3.3 环境变量474
22.3.4 运行shell475
22.3.5 创建临时文件476
22.3.6 竞争状态和信号处理478
22.3.7 关闭文件描述符478
22.4 作为守护进程运行479
第4部分 开发库
第23章 字符串的匹配482
23.1 匹配任意字符串482
23.2 正则表达式483
23.2.1 linux正则表达式483
23.2.2 正则表达式的匹配484
23.2.3 一个简单的grep示例489
第24章 用s-lang来处理终端495
24.1 输入处理495
24.1.1 初始化s-lang的输入处理496
24.1.2 恢复终端状态497
24.1.3 从终端读取字符497
24.1.4 检查未决的输入498
24.2 输出处理498
24.2.1 初始化屏幕管理499
24.2.2 更新显示499
24.2.3 移动光标499
24.2.4 结束屏幕管理500
24.2.5 屏幕管理的框架程序500
24.2.6 切换字符集501
24.2.7 输出到屏幕502
24.2.8 画线和画矩形503
24.2.9 使用颜色505
第25章 基于散列的数据库函数库508
25.1 概述508
25.2 基本操作509
25.2.1 打开qdbm文件509
25.2.2 关闭数据库510
25.2.3 获得文件描述符511
25.2.4 同步数据库511
25.3 读取记录512
25.3.1 读取特定的记录512
25.3.2 顺序读取记录513
25.4 修改数据库513
25.4.1 增加记录513
25.4.2 删除记录514
25.5 实例514
第26章 解析命令行选项521
26.1 选项表522
26.1.1 定义选项522
26.1.2 嵌套选项表525
26.2 使用选项表526
26.2.1 创建上下文526
26.2.2 解析命令行527
26.2.3 剩余的参数528
26.2.4 自动帮助信息528
26.3 使用回调(callback)531
26.4 错误处理534
26.5 选项别名536
26.5.1 指定别名536
26.5.2 使别名生效537
26.6 解析参数字符串538
26.7 处理额外参数538
26.8 应用程序示例538
第27章 运行时动态加载540
动态加载接口541
示例544
第28章 用户识别和验证546
28.1 id到名字的转换546
示例:id命令549
28.2 可挂接的认证模块552
28.2.1 pam 会话553
28.2.2 pam操作555
附 录
附录a 头文件564
附录b ladsh源文件565
词汇表584
参考文献593
索引597

商品评论(0条)

暂无评论!

您的浏览历史

loading 内容加载中,请稍后...