《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版)》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 195 Tenth Line
Given a text file file.txt, print just the 10th line of the file. Example: Assume that file.txt has ...
- 《深入分析JavaWeb技术内幕》学习笔记
第一章 深入Web请求过程 1.1 B/S网站架构概述 HTTP协议采用无状态的短连接的通信方式.通常一次请求就完成一次数据交互,通常也对应一个业务逻辑. 当在浏览器里输入一个URL,首先会请求DNS ...
- django用户系统的测试,蛮不错的。
https://blog.csdn.net/orangleliu/article/details/51944758 这个很实用 https://www.cnblogs.com/yanhuidj/p/1 ...
- 如果django里的视图是类(CBV),应该如何写Url的测试用例?
晚上回家测试了很多方式,都不行. 网上搜索找不到答案, 最后还是官方文档最抵用呢. https://docs.djangoproject.com/en/2.1/topics/testing/tools ...
- Java 构造 BSON 数据类型
Java 构造 BSON 数据类型 整数/符浮点数 Java BSON 构造整数/符浮点数类型 // {a:123, b:3.14} BSONObject obj = new BasicBSONObj ...
- 下载vc++运行库
之前下载vc++运行库都是百度,从中关村.当下等软件网站下载,但是最近这些网站涉及到安全问题,所以从官网下载比较合适 微软官网-中文 在搜索中 搜索vc++2010/2015等,搜索结果中找到xxxx ...
- day13--开发堡垒机
本节内容 项目实战:运维堡垒机开发 商业:<齐治--堡垒机> 前景介绍 https://www.cnblogs.com/alex3714/articles/ ...
- vs2010 打包安装
https://jingyan.baidu.com/article/b7001fe184e4e50e7382dd4e.html 1 建立安装项目2 要安装的文件都添加到应用程序文件夹3 在应用程序文件 ...
- mysql 事务隔离级别 详解
问题 在工作中真实遇到的问题:用python连接mysql,查询数据,同时有别的代码在更新mysql中的数据,前者是一直是保持连接的数据库,每一分钟select一次,但第二次却查不到更新后的数据?wh ...
- 移动端h5需要注意的一些事
1.移动端点击a标签出现的背景色 a, a:hover, a:active, a:visited, a:link, a:focus { -webkit-tap-highlight-color: rgb ...