《UNIX环境高级编程(第3版)》

《UNIX环境高级编程(第3版)》

基本信息

原书名:Advanced Programming
in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing
Series)

原出版社: Addison-Wesley
Professional

作者: (美)W. Richard
Stevens    Stephen A. Rago

译者: 戚正伟 张亚英
尤晋元

出版社:人民邮电出版社

ISBN:9787115352118

上架时间:2014-5-27

出版日期:2014 年6月

开本:16开

页码:812

版次:2-1

所属分类:计算机 > 操作系统 >
UNIX

更多关于》》》
《UNIX环境高级编程(第3版)

编辑推荐 

20多年来,严谨的C程序员都是依靠一本书来深入了解驱动UNIX和Linux内核的编程接口的实用知识的,这本书就是W.
Richard Stevens所著的《UNIX高级环境编程》。现在,Stevens的同事Steve
Rago彻底更新了这本经典著作。新的第3版支持当今领先的系统平台,反映了最新技术进展和最佳实践,并且符合最新的Single UNIX
Specification第4版(SUSv4)。

  
Rago保留了使本书前版成为经典之作的精髓和方法。他在Stevens原著的基础上,从基础的文件、目录和进程讲起,并给诸如信号处理和终端I/O之类的先进技术保留较大的篇幅。他还深入讨论了线程和多线程编程、使用套接字接口驱动进程间通信(IPC)等方面的内容。

  这一版涵盖了70多个最新版POSIX.1标准的新增接口,包括POSIX异步I/O、旋转锁、屏障(barrier)和POSIX信号量。此外,这一版删除了许多过时的接口,保留了一些广泛使用的接口。书中几乎所有实例都已经在目前最主流的4个平台上测试过,包括Solaris
10、Mac OS X 10.6.8(Darwin 10.8.0)、FressBSD 8.0、Ubuntu 12.04(基于Linux
3.2内核)。

  与前两版一样,读者仍可以通过实例学习,这些实例包括了1万多行可下载的ISO
C源代码,书中通过简明但完整的程序阐述了400多个系统调用和函数,清楚地说明它们的用法、参数和返回值。为了使读者能融会贯通,书中还提供了几个贯穿整章的案例,每个案例都根据现在的技术环境进行了全面更新。

  本书帮助了几代程序员写出强大、高性能、可靠的代码。第3版根据当今主流系统进行更新,更具实用价值。

内容简介

书籍

计算机书籍

《unix环境高级编程(第3版)》是被誉为unix编程“圣经”的advanced
programming in the unix
environment一书的第3版。在本书第2版出版后的8年中,unix行业发生了巨大的变化,特别是影响unix编程接口的有关标准变化很大。本书在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍unix文件和目录、标准i/o库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种i/o、进程间通信、网络ipc、伪终端等方面的内容,还在此基础上介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附录中给出了函数原型和部分习题的答案。

《unix环境高级编程(第3版)》内容权威,概念清晰,阐述精辟,对于所有层次unix/linux程序员都是一本不可或缺的参考书。

媒体评论

  “本书第1版连同Stevens所著的系列网络技术书籍,被公认为优秀的、匠心独具的名著,成为极其畅销的作品……总之,这是一本弥足珍贵的经典著作的更新版。”

  ——Dennis
Ritchie,图灵奖得主,UNIX操作系统和C语言之父

  “对任何一个严谨的、专业的UNIX系统程序员而言,本书都是不可或缺的权威参考书。Rago更新和扩展了Stevens的经典著作,并保持了原书的风貌。书中利用清晰的实例演示了API的使用过程,还提到了许多在不同UNIX系统实现上编程时需要注意的陷阱,并指出如何使用相关的标准(如POSIX
1003.1 2004版和Single UNIX Specification第3版)来避免这些错误。”

  ——Andrew Josey, The
Open Group标准部门主管,POSIX 1003.1标准工作组主席

  “最重要的UNIX编程经典之一。”

  ——Eric S.
Raymond,《UNIX编程艺术》作者

  “Stephen
Rago的更新版本对于使用众多UNIX及相关操作系统环境的广大专业用户来说是一个迟来的喜讯。这一版不仅删除了过时的接口,吸纳了较新的开发接口,还根据UNIX及类UNIX操作系统环境的几种主流实现发布的新版本全面更新了所有主题、实例和应用的背景。难能可贵的是,这一版本还保持了经典的第1版的风格和品位。”

  ——Mukesh Kacker,Pronto
Networks公司联合创始人和前任CTO

  “本书对于任何在UNIX系统上编写程序的开发人员来说都是非常重要的参考书。当我想要了解或者重新回顾各种系统接口时,这本书是首选的求助工具。Stephen
Rago成功地修订了本书,使其与新的操作系统(如GNU/Linux和苹果的OS
X)相容,并保持了第1版易读和实用的特质。它将永远摆放在我桌上随手可及的位置。”

  ——Benjamin
Kuperman博士,斯沃斯莫尔学院

  “这是每一位严谨的UNIX
C程序员必备的书籍。它深入、全面、清晰的解释是无可匹敌的。”

  ——UniForum
Monthly

  “从W. Richard
Stevens的这本书中可以找到更多易于理解的、详尽的UNIX系统内部细节。这本书包含了大量实际的例子,对系统编程工作非常有益。”

  ——RS/Magazine

目录

《unix环境高级编程(第3版)》

第1章 unix基础知识 1

1.1 引言 1

1.2 unix体系结构 1

1.3 登录 1

1.4 文件和目录 3

1.5 输入和输出 6

1.6 程序和进程 8

1.7 出错处理 11

1.8 用户标识 13

1.9 信号 14

1.10 时间值 16

1.11 系统调用和库函数
17

1.12 小结 18

习题 18

第2章 unix标准及实现
20

2.1 引言 20

2.2 unix标准化 20

2.2.1 iso c 20

2.2.2 ieee posix
21

2.2.3 single unix
specification 25

2.2.4 fips 26

2.3 unix系统实现
26

2.3.1 svr4 27

2.3.2 4.4bsd
27

2.3.3 freebsd
28

2.3.4 linux 28

2.3.5 mac os x
28

2.3.6 solaris
28

2.3.7 其他unix系统
29

2.4 标准和实现的关系
29

2.5 限制 29

2.5.1 iso c限制
30

2.5.2 posix限制
31

2.5.3 xsi限制 33

2.5.4
函数sysconf、pathconf和fpathconf 33

2.5.5 不确定的运行时限制
40

2.6 选项 43

2.7 功能测试宏 46

2.8 基本系统数据类型
47

2.9 标准之间的冲突 48

2.10 小结 48

习题 48

第3章 文件i/o 49

3.1 引言 49

3.2 文件描述符 49

3.3 函数open和openat
50

3.4 函数creat 52

3.5 函数close 53

3.6 函数lseek 53

3.7 函数read 57

3.8 函数write 57

3.9 i/o的效率 58

3.10 文件共享 59

3.11 原子操作 62

3.12 函数dup和dup2
63

3.13
函数sync、fsync和fdatasync 65

3.14 函数fcntl
65

3.15 函数ioctl
70

3.16 /dev/fd
71

3.17 小结 72

习题 72

第4章 文件和目录 74

4.1 引言 74

4.2
函数stat、fstat、fstatat和lstat 74

4.3 文件类型 75

4.4 设置用户id和设置组id
78

4.5 文件访问权限 79

4.6 新文件和目录的所有权
80

4.7 函数access和faccessat
81

4.8 函数umask 82

4.9
函数chmod、fchmod和fchmodat 84

4.10 粘着位 87

4.11
函数chown、fchown、fchownat和lchown 87

4.12 文件长度 89

4.13 文件截断 90

4.14 文件系统 90

4.15
函数link、linkat、unlink、unlinkat和remove 93

4.16 函数rename和renameat
95

4.17 符号链接 96

4.18 创建和读取符号链接
99

4.19 文件的时间 99

4.20
函数futimens、utimensat和utimes 101

4.21
函数mkdir、mkdirat和rmdir 103

4.22 读目录 104

4.23
函数chdir、fchdir和getcwd 108

4.24 设备特殊文件
110

4.25 文件访问权限位小结
112

4.26 小结 113

习题 113

第5章 标准i/o库 115

5.1 引言 115

5.2 流和file对象
115

5.3 标准输入、标准输出和标准错误
116

5.4 缓冲 116

5.5 打开流 118

5.6 读和写流 120

5.7 每次一行i/o
122

5.8 标准i/o的效率
123

5.9 二进制i/o 125

5.10 定位流 126

5.11 格式化i/o
127

5.12 实现细节 131

5.13 临时文件 134

5.14 内存流 137

5.15 标准i/o的替代软件
140

5.16 小结 140

习题 140

第6章 系统数据文件和信息
142

6.1 引言 142

6.2 口令文件 142

6.3 阴影口令 145

6.4 组文件 146

6.5 附属组id 147

6.6 实现区别 148

6.7 其他数据文件 148

6.8 登录账户记录 149

6.9 系统标识 150

6.10 时间和日期例程
151

6.11 小结 157

习题 157

第7章 进程环境 158

7.1 引言 158

7.2 main函数 158

7.3 进程终止 158

7.4 命令行参数 162

7.5 环境表 163

7.6 c程序的存储空间布局
163

7.7 共享库 165

7.8 存储空间分配 165

7.9 环境变量 168

7.10 函数setjmp和longjmp
170

7.11
函数getrlimit和setrlimit 175

7.12 小结 180

习题 180

第8章 进程控制 181

8.1 引言 181

8.2 进程标识 181

8.3 函数fork 182

8.4 函数vfork
187

8.5 函数exit 188

8.6 函数wait和waitpid
190

8.7 函数waitid
194

8.8 函数wait3和wait4
195

8.9 竞争条件 196

8.10 函数exec
199

8.11 更改用户id和更改组id
204

8.12 解释器文件 207

8.13 函数system
211

8.14 进程会计 215

8.15 用户标识 220

8.16 进程调度 221

8.17 进程时间 224

8.18 小结 226

习题 226

第9章 进程关系 228

9.1 引言 228

9.2 终端登录 228

9.3 网络登录 231

9.4 进程组 233

9.5 会话 234

9.6 控制终端 235

9.7
函数tcgetpgrp、tcsetpgrp和tcgetsid 237

9.8 作业控制 237

9.9 shell执行程序
240

9.10 孤儿进程组 244

9.11 freebsd实现
246

9.12 小结 248

习题 248

第10章 信号 249

10.1 引言 249

10.2 信号概念 249

10.3 函数signal
256

10.4 不可靠的信号
259

10.5 中断的系统调用
260

10.6 可重入函数 262

10.7 sigcld语义
264

10.8 可靠信号术语和语义
266

10.9 函数kill和raise
267

10.10 函数alarm和pause
268

10.11 信号集 273

10.12 函数sigprocmask
275

10.13 函数sigpending
276

10.14 函数sigaction
278

10.15
函数sigsetjmp和siglongjmp 283

10.16 函数sigsuspend
286

10.17 函数abort
291

10.18 函数system
293

10.19
函数sleep、nanosleep和clock_nanosleep 298

10.20 函数sigqueue
300

10.21 作业控制信号
301

10.22 信号名和编号
303

10.23 小结 305

习题 305

第11章 线程 307

11.1 引言 307

11.2 线程概念 307

11.3 线程标识 308

11.4 线程创建 309

11.5 线程终止 311

11.6 线程同步 318

11.6.1 互斥量 320

11.6.2 避免死锁
322

11.6.3
函数pthread_mutex_timedlock 327

11.6.4 读写锁 328

11.6.5 带有超时的读写锁
332

11.6.6 条件变量
332

11.6.7 自旋锁 335

11.6.8 屏障 336

11.7 小结 340

习题 340

第12章 线程控制 341

12.1 引言 341

12.2 线程限制 341

12.3 线程属性 342

12.4 同步属性 345

12.4.1 互斥量属性
345

12.4.2 读写锁属性
352

12.4.3 条件变量属性
353

12.4.4 屏障属性
353

12.5 重入 354

12.6 线程特定数据
358

12.7 取消选项 361

12.8 线程和信号 364

12.9 线程和fork
367

12.10 线程和i/o
370

12.11 小结 371

习题 371

第13章 守护进程 372

13.1 引言 372

13.2 守护进程的特征
372

13.3 编程规则 374

13.4 出错记录 377

13.5 单实例守护进程
380

13.6 守护进程的惯例
381

13.7 客户进程-服务器进程模型
386

13.8 小结 386

习题 387

第14章 高级i/o 388

14.1 引言 388

14.2 非阻塞i/o
388

14.3 记录锁 391

14.4 i/o多路转接
403

14.4.1 函数select和pselect
404

14.4.2 函数poll
408

14.5 异步i/o 410

14.5.1 system v异步i/o
410

14.5.2 bsd异步i/o
411

14.5.3 posix异步i/o
411

14.6 函数readv和writev
419

14.7 函数readn和writen
421

14.8 存储映射i/o
422

14.9 小结 428

习题 428

第15章 进程间通信 429

15.1 引言 429

15.2 管道 430

15.3 函数popen和pclose
436

15.4 协同进程 441

15.5 fifo 445

15.6 xsi ipc
448

15.6.1 标识符和键
448

15.6.2 权限结构
449

15.6.3 结构限制
450

15.6.4 优点和缺点
450

15.7 消息队列 451

15.8 信号量 455

15.9 共享存储 459

15.10 posix信号量
465

15.11 客户进程-服务器进程属性
470

15.11 小结 472

习题 472

第16章 网络ipc:套接字
474

16.1 引言 474

16.2 套接字描述符
474

16.3 寻址 477

16.3.1 字节序 477

16.3.2 地址格式
478

16.3.3 地址查询
480

16.3.4 将套接字与地址关联
486

16.4 建立连接 487

16.5 数据传输 491

16.6 套接字选项 502

16.7 带外数据 504

16.8 非阻塞和异步i/o
505

16.9 小结 506

习题 506

第17章 高级进程间通信
507

17.1 引言 507

17.2 unix域套接字
507

17.3 唯一连接 512

17.4 传送文件描述符
518

17.5 open服务器进程第1版
527

17.6 open服务器进程第2版
533

17.7 小结 542

习题 542

第18章 终端i/o 544

18.1 引言 544

18.2 综述 544

18.3 特殊输入字符
549

18.4 获得和设置终端属性
553

18.5 终端选项标志
554

18.6 stty命令
560

18.7 波特率函数 560

18.8 行控制函数 561

18.9 终端标识 562

18.10 规范模式 567

18.11 非规范模式
570

18.12 终端窗口大小
576

18.13
termcap、terminfo和curses 578

18.14 小结 578

习题 579

第19章 伪终端 580

19.1 引言 580

19.2 概述 580

19.3 打开伪终端设备
585

19.4 函数pty_fork
588

19.5 pty程序 590

19.6 使用pty程序
595

19.7 高级特性 600

19.8 小结 601

习题 601

第20章 数据库函数库
603

20.1 引言 603

20.2 历史 603

20.3 函数库 604

20.4 实现概述 605

20.5 集中式或非集中式
608

20.6 并发 610

20.7 构造函数库 610

20.8 源代码 611

20.9 性能 635

20.10 小结 639

习题 639

第21章 与网络打印机通信
640

21.1 引言 640

21.2 网络打印协议
640

21.3 超文本传输协议http
642

21.4 打印假脱机技术
643

21.5 源代码 644

21.6 小结 684

习题 684

附录a 函数原型 685

附录a 函数原型附录b 其他源代码
721

附录c 部分习题答案 730

附录参考书目 730

索引 770

本图书信息来源:互动出版网

《UNIX环境高级编程(第3版)》,布布扣,bubuko.com

时间: 2024-10-12 06:25:14

《UNIX环境高级编程(第3版)》的相关文章

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index

IOS测试框架之:athrun的InstrumentDriver源码阅读笔记

athrun的InstrumentDriver源码阅读笔记 作者:唯一 athrun是淘宝的开源测试项目,InstrumentDriver是ios端的实现,之前在公司项目中用过这个框架,没有深入了解,现在回来记录下. 官方介绍:http://code.taobao.org/p/athrun/wiki/instrumentDriver/ 优点:这个框架是对UIAutomation的java实现,在代码提示.用例维护方面比UIAutomation强多了,借junit4的光,我们可以通过junit4的

Yii源码阅读笔记 - 日志组件

?使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category);Yii::trace($message, $category); 两者的区别在于后者依赖于应用开启调试模式,即定义常量YII_DEBUG: defined('YII_DEBUG') or define('YII_DEBUG', true); Yii::log方法的调用需要指定message的level和category.category是格式为“xxx.yyy.z

源码阅读笔记 - 1 MSVC2015中的std::sort

大约寒假开始的时候我就已经把std::sort的源码阅读完毕并理解其中的做法了,到了寒假结尾,姑且把它写出来 这是我的第一篇源码阅读笔记,以后会发更多的,包括算法和库实现,源码会按照我自己的代码风格格式化,去掉或者展开用于条件编译或者debug检查的宏,依重要程度重新排序函数,但是不会改变命名方式(虽然MSVC的STL命名实在是我不能接受的那种),对于代码块的解释会在代码块前(上面)用注释标明. template<class _RanIt, class _Diff, class _Pr> in

CI框架源码阅读笔记5 基准测试 BenchMark.php

上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功能,各模块之间可以相互调用,共同构成了CI的核心骨架. 从本篇开始,将进一步去分析各组件的实现细节,深入CI核心的黑盒内部(研究之后,其实就应该是白盒了,仅仅对于应用来说,它应该算是黑盒),从而更好的去认识.把握这个框架. 按照惯例,在开始之前,我们贴上CI中不完全的核心组件图: 由于BenchMa

CI框架源码阅读笔记2 一切的入口 index.php

上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里这次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中,我们并不会逐行进行解释,而只解释核心的功能和实现. 1.       设置应用程序环境 define('ENVIRONMENT', 'development'); 这里的development可以是任何你喜欢的环境名称(比如dev,再如test),相对应的,你要在下面的switch case代码块中

Apache Storm源码阅读笔记

欢迎转载,转载请注明出处. 楔子 自从建了Spark交流的QQ群之后,热情加入的同学不少,大家不仅对Spark很热衷对于Storm也是充满好奇.大家都提到一个问题就是有关storm内部实现机理的资料比较少,理解起来非常费劲. 尽管自己也陆续对storm的源码走读发表了一些博文,当时写的时候比较匆忙,有时候衔接的不是太好,此番做了一些整理,主要是针对TridentTopology部分,修改过的内容采用pdf格式发布,方便打印. 文章中有些内容的理解得益于徐明明和fxjwind两位的指点,非常感谢.

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入

jdk源码阅读笔记之java集合框架(二)(ArrayList)

关于ArrayList的分析,会从且仅从其添加(add)与删除(remove)方法入手. ArrayList类定义: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco } span.s1 { color: #931a68 } public class ArrayList<E> extends AbstractList<E> implements List<E> ArrayList基本属性: /** *

dubbo源码阅读笔记--服务调用时序

上接dubbo源码阅读笔记--暴露服务时序,继续梳理服务调用时序,下图右面红线流程. 整理了调用时序图 分为3步,connect,decode,invoke. 连接 AllChannelHandler.connected(Channel) line: 38 HeartbeatHandler.connected(Channel) line: 47 MultiMessageHandler(AbstractChannelHandlerDelegate).connected(Channel) line: