闪耀在UNIX传奇往事中的启示,UNIX见证者带你一览究竟

4月20日晚8点,锁定直播间:UNIX传奇往事的启示——暨《UNIX传奇》新书发布会。

UNIX是现代操作系统的鼻祖。从UNIX到FreeBSD,再到OS X,最后到iOS应运而生。由于UNIX的版权纠纷和Minix的封闭,Linux诞生了,而后又产生了Android。

UNIX的创造者奠定了操作系统的标准基石,UNIX的“分而治之”设计哲学——让每个程序做好一件事;要做一件新的工作,就构建新程序,而不是通过增加新“特性”使旧程序复杂化——被优秀程序员奉为圭臬。

如果将操作系统比喻成酒,那么UNIX应该是所有操作系统的“基酒”,因为有了它,才有了现在的互联网 / 物联网世界。所有行业都在数字化,数字化的服务就是操作系统控制的各种程序,我们现在依赖的各种网站、 云计算、大数据、手机通信及航空航天技术的背后都是操作系统在控制调度的。

自1969 年在贝尔实验室的阁楼上诞生以来,UNIX操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。

那么,UNIX操作系统为何如此重要?UNIX是如何产生的?贝尔实验室为何诞生了那么多图灵奖得主?中国操作系统的未来会如何?

带着这些问题,4月20日晚8点,异步社区特邀CSDN创始人蒋涛、 HybridOS操作系统创始人魏永明、 CSDN副总裁、前微软研发总监邹欣、 《UNIX传奇》译者韩磊,在线直播,围绕贝尔实验室、UNIX传奇往事的启示等一系列问题进行探讨,带你揭秘操作系统鼻祖UNIX的发展之史,揭示传奇之路背后的可借鉴之处。

https://live.csdn.net/room/csdnnews/8u8EVW5z

进入直播间,直达文末预约

UNIX传奇的见证者——布莱恩·W.克尼汉

布莱恩·W.克尼汉(Brian W. Kernighan),1942年出生于加拿大多伦多,本科就读于多伦多大学工程物理专业,1969年获得普林斯顿大学电气工程博士学位,同年加入了20世纪最伟大的实验室——贝尔实验室。

在肯·汤姆森于1969年创作出了UNIX的雏形后,布莱恩·W.克尼汉创造了“UNIX”这一词,并为UNIX命名,还帮助推广了肯·汤姆森的UNIX哲学。

(布莱恩·W.克尼汉详细写了关于UNIX哲学的文章)

此后,布莱恩·W.克尼汉为UNIX创造了很多软件工具和语言,传播了“C/UNIX思想”的精髓。

1973年,布莱恩·W.克尼汉为UNIX编写了一个名为Ratfor的编译器。1976年,为了向在非UNIX系统上编写Fortran的程序员传播UNIX工具理念,他和比尔·普劳格合著了《Software Tools(软件工具)》,其中介绍了标准UNIX工具的Ratfor版本。

1974年,布莱恩·W.克尼汉和洛琳达·彻丽编写了UNIX操作系统中排版软件Troff中的eqn,用于处理数学排版。

1977年,布莱恩·W.克尼汉和阿尔·阿霍、彼得·温伯格共同开发了AWK。AWK作为第7版本UNIX中的早期工具之一,是专为文本处理设计的语言,是大多数类UNIX操作系统的标准功能。

1978年,布莱恩·W.克尼汉与C语言之父丹尼斯·里奇合著了《C程序设计语言》。这本书是是第一部介绍C语言编程方法的书籍,在C语言的发展和普及过程中起到了非常重要的作用,被视为是C语言的业界标准规范,被誉为“C语言圣经”,而且至今仍然广泛使用。

(1978年,《C程序设计语言》封面)

1985年,布莱恩·W.克尼汉与罗伯特·傅里叶(Robert Fourer)、大卫·盖伊(David Gay)共同创造了AMPL编程语言,这是一种代数建模语言,用以解决与描述大规模数学运算中的高度复杂问题。

1988年,布莱恩·W.克尼汉在 UNIX环境中为非程序员提供舒适的语言,发明了程序编程语言Pic。

......

布莱恩·W.克尼汉曾说:“UNIX是一个奇点,它是改变计算机世界的各种因素的独特组合结果。”他认为目前不会有另一个像UNIX一样的操作系统横空出世,在几十年内占领世界,不会有新的“操作系统革命”。如今的操作系统会继续发展,同时这些操作系统都是带有大量UNIX DNA的

(ACM数字图书馆官网对布莱恩·W.克尼汉的成就所概括的关键词)

UNIX是一个“奇点”,富有深厚的思想启示

贝尔实验室是在美国科学创造的黄金时代产生的。布莱恩·W.克尼汉身处贝尔实验室,见证了UNIX 的诞生,领略了UNIX历史中的天才人物的个性,目睹并亲历了这些天才们创造一个个优秀工具时所经历的思考和过程,也悉知什么样的环境和机制才能带来这样的创造性......

他用有趣的文字和翔实的资料创作了《UNIX传奇:历史与回忆》,给我们展示了 UNIX 如何从无到有,以及如何从一个实验项目成长为工业级的事实标准的故事。

正如布莱恩·W.克尼汉在书中所言:

“本书主要的写作目的是讲述计算机历史上某个极具生产力和发展性的时期中的一些精彩往事。理解我们习以为常地使用的技术如何演化而来,颇为要紧。有人顶住压力、克服时间限制,做出了定义技术发展方向和路径的决策。

越了解历史,我们越感激那些带来 UNIX 的发明天才,或许也越能理解现代计算机系统是如何发展成现在这个样子的。仅就那些如今看起来大错特错抑或倒行逆施的选择而言,常常也是在当时可用资源限制之下所能考虑和实现的必然结果。”

他不仅在书中写到了技术内容,还写了许多有趣的幕后故事,写了那些天才人物的个性,以及UNIX诞生和发展的独特创造性环境,带领读者一览UNIX传奇历史,理解操作系统的精髓,领悟那些伟大科学家的开拓精神,从中汲取养分,丰富自身思想。

当然,UNIX传奇往事带给我们的启示绝不仅于此。

在这瑰丽的史诗中,聪明的研发者、开明的管理者以及管理者与研发者共同营造的开放环境和宽松氛围,鼓励创新创造的企业文化和不断追求卓越的专业精神,持续的投资和投入,不仅是 UNIX 取得成功的关键要素,也正是我们当前在倡导和推进科技创新、管理创新过程中值得好好学习、思考和借鉴的东西。

数百年的科技发展史告诉我们,谁掌握了科技的创新,谁才能成为全球经济的主导者。

当今我国在互联网应用和移动应用方面已走在世界前列,但在系统科技领域、原创科技领域还乏善可陈,我们正面临信息技术的又一次大革命,5G、人工智能、物联网、区块链等技术进一步发展。生逢其时,中国科技工作者需要从应用创新走向系统创新,需要沉下来去钻研突破重大的基础课题,需要争做科技创新的时代先锋。

那么,怎样构造这样的环境?怎样激发这样的人才?怎样驱动科技创新?这些问题都可以在UNIX传奇往事中找到答案

本书所揭示的贝尔实验室的“玄机”——贝尔实验室人才济济,出现了多位图灵奖得主、多位语言创始人,离不开它的制度和模式。这正是我们渴求的答案。

(1983年,UNIX的两位创造者肯·汤普森(左一)和丹尼斯·里奇(左二)获得图灵奖)

这个环境自由、开放,不迷信和崇拜权威,百花齐放,百家争鸣。对于努力发展前沿科技的我们来说,贝尔实验室中明确的管理层级,稳定自由的科研环境,自上而下的评级,便利的工作环境,支持图书写作,技术管理、和而不争,有远见的持续投资等制度是极为宝贵的启示。

(1961年的贝尔实验室)

总而言之,UNIX传奇绝不仅仅只是一段UNIX成功史,而是一套能真正帮助我们解决现有问题的启示录

“回忆往往披着玫瑰色的光晕,令人欢欣”

由此可见,UNIX这段传奇历史,每个人都应该知晓,它既对激发科技工作者的创新思维有重要作用,也对非技术人才具有重要的启发作用。不过对于这段恢弘的历史,缺乏全面详细的记录,人们在探索其中奥秘时,仍然没有方便快捷的途径去一览UNIX传奇历史的绚烂。

因此,UNIX的创造者之一、UNIX诞生与发展的见证者布莱恩·W.克尼汉为大家撰写了《UNIX传奇:历史与回忆》,书写UNIX的历史,记录此间回忆。

布莱恩·W.克尼汉在本书中重点叙述了1969年UNIX雏形的诞生,1971年 UNIX 初版的发布,1975年第6版 UNIX 的发布,第7版 UNIX 的发布,UNIX在科研中心之外的传播,UNIX的商业化以及UNIX的派生物。

虽然UNIX 操作系统是故事的中心,但其余亦有涉及。

布莱恩·W.克尼汉还在书中讲述被广泛使用的 C 语言,人们用它编写了支持互联网运行的系统及利用系统能力的各种服务。在贝尔实验室,还有一些编程语言随 UNIX  而生, 尤其要提到也被广泛使用的 C++。Word、Excel 和 PowerPoint 等微软 Office 软件就是用 C++ 写成的,大多数网页浏览器也是用 C++ 编写的。程序员们耳熟能详的一二十个日常开发工具,在 UNIX  的早期就已问世,四五十年以来一直维持原状,至今仍在许多程序员的工具包中有一席之地

其中,计算机科学理论同样扮演着重要的角色,常常极大地推动实用工具的产生。硬件研究开拓出设计工具、集成电路、计算机体系架构,还有不常见的特殊用途设备。这些活动相互作用,往往带来预料以外的发明,这也是贝尔实验室在多个不同领域持续产出活力的原因之一

布莱恩·W.克尼汉作为UNIX的见证者,从自己的人生轨迹切入,并以UNIX的关键成就和在这些关键成就里各个UNIX核心的领袖人物的活动以及思考为切入点双向展开,撰写了这本意蕴深刻的书籍《UNIX传奇:历史与回忆》。

这本书用传奇人物的故事串联一系列重要发明的起源与发展,用管理创新故事解读了贝尔实验室科技创新的背后力量,带领我们探寻了9项诺贝尔奖和4项图灵奖的传奇起源。

“CSDN创始人蒋涛:Unix传奇往事的启示”

这本书的出版同样唤起了《UNIX传奇》的序作者之一,CSDN创始人蒋涛的的编程记忆。

1990年他在大学里啃读这本书作者写的《C程序设计语言》,1992年他的的好友梁肇新(超级解霸创始人)手抄Minix源代码一万多行。

最近30年全球经济取得巨大发展,经济发展最大的推动力源自信息技术创新。

然而全球最领先的企业都是软件驱动的。不用说谷歌、腾讯,就连硬件领域最大公司苹果的创始人史蒂夫•乔布斯2007年也说过:“苹果公司最大的秘密,那就是苹果把自己看成是一家软件公司。如果你仔细想一下MacBook是什么,它是OS X操作系统——虽然它也有一个漂亮的外壳,但它是OS X操作系统。如果你想一下iPhone 是什么,它也是软件。”

软件技术的“皇冠明珠”就是操作系统。所有行业都在数字化,数字化的服务就是操作系统控制的各种程序,我们现在依赖的各种网站、云计算、大数据、手机通信及航空航天技术的背后都是操作系统在控制调度的。

UNIX是现代操作系统的鼻祖。从UNIX到FreeBSD,再到OS X,最后到iOS应运而生。由于UNIX的版权纠纷和Minix的封闭,Linux诞生了,而后又产生了Android。

UNIX的创造者奠定了操作系统的标准基石,UNIX的“分而治之”设计哲学——让每个程序做好一件事;要做一件新的工作,就构建新程序,而不是通过增加新“特性”使旧程序复杂化——被优秀程序员奉为圭臬。

文件、目录、系统调用、shell、管道,还有一大批优秀的生产力工具,如grep(正则表达式)、diff、Lex、Yacc、Make等,都凝结着UNIX创造者的智慧和心血。

贝尔实验室是在美国科学创造的黄金时代产生的。作者布莱恩身处贝尔实验室,见证了UNIX的诞生,他用有趣的文字和翔实的资料给我们展示了UNIX如何从无到有,以及如何从一个实验项目成长为工业级的事实标准的故事。

一大批天才人物聚集在一起,没有生活的压力,没有KPI的烦恼,自由地探索科学的发展和应用。即使是贝尔实验室的小角色后来都成了大人物,比如谷歌前董事长埃里克•埃默森•施密特就曾作为贝尔实验室实习生参与编写Lex第一版程序。这些天才人物是什么样的个性?创作一个个优秀工具的时候他们经历了什么样的思考和过程?什么样的环境和机制才能带来这样的创造性?这些精彩往事值得细读。

为什么我们今天要读这本书?

数百年的科技发展史告诉我们,谁掌握了科技的创新,谁才能成为全球经济的主导者。当今我国在互联网应用和移动应用方面已走在世界前列,但在系统科技领域、原创科技领域还乏善可陈,我们正面临信息技术的又一次大革命,5G、人工智能、物联网、区块链等技术进一步发展。生逢其时,中国科技工作者需要从应用创新走向系统创新,需要沉下来去钻研突破重大的基础课题,需要争做科技创新的时代先锋。

怎样构造这样的环境?怎样激发这样的人才?怎样驱动科技创新?这些问题都可以从这本书略见端倪。小米创始人雷军说过大学里读到的《硅谷之火》激励了他从事软件创业,希望这本UNIX创造者的精彩故事集也能激励年轻科技工作者从事系统科技的研究与创新。

“《UNIX传奇》新书发布会”

值此《UNIX传奇:历史与回忆》出版之际,异步社区联合CSDN,邀请到本书译者、IT产品与运营专家韩磊,CSDN创始人、总裁蒋涛,HybridOS/MiniGUI/HVML开源项目创始人、北京飞漫软件技术有限公司总经理兼首席架构师魏永明,前微软Azure工程团队首席研发经理、技术畅销书《编程之美》及《构建之法》的作者、现CSDN副总裁邹欣,带来《UNIX传奇往事的启示》主题直播!

4月20日晚8点,我们将对语言或操作系统的专利权、中国技术专才的发展前途、UNIX带来的启发和反思、贝尔实验室计算科学研究中心的管理模式与风格、当今中国IT企业的KPI模式、国有操作系统的未来等方面进行探讨,分享UNIX传奇往事给我们带来的启示。

不管你是操作系统行业从业者、互联网领域的从业者、计算机相关专业的教师与学生还是操作系统的热爱者及对计算或创新史感兴趣的读者......

锁定本次直播活动,你都能从UNIX传奇往事中找到启示,获益匪浅!

作者:[美] 布莱恩·W.克尼汉(Brian W.Kernighan)

译者:韩磊

自1969年在贝尔实验室的阁楼上诞生以来,UNIX操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。

本书不但书写UNIX的历史,而且记录作者的回忆,一探UNIX的起源,试图解释什么是UNIX,UNIX是如何产生的,以及UNIX为何如此重要。除此之外,本书以轻松的口吻讲述了一群在贝尔实验室工作的发明天才的有趣往事,探秘他们如何从传说中走出来,就地显现极客真面目。本书中每一个精彩故事都是鲜为人知却又值得传播的宝贵资源。

本书是为对计算机或相关历史感兴趣的人编写的,虽然它包括一部分技术相关的资料,但读者不需要有太多的专业技术背景,就可以欣赏UNIX背后的思想,了解它的重要性。

已标记关键词 清除标记
相关推荐
目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时间限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数 79 4.21 读目录 80 4.22 chdir, fchdir和getcwd函数 84 4.23 特殊设备文件 86 4.24 sync和fsync函数 87 4.25 文件存取许可权位小结 88 4.26 小结 89 习题 89 第5章 标准I/O库 91 5.1 引言 91 5.2 流和FILE对象 91 5.3 标准输入、标准输出和标准出错 91 5.4 缓存 91 5.5 打开流 94 5.6 读和写流 96 5.6.1 输入函数 96 5.6.2 输出函数 97 5.7 每次一行I/O 98 5.8 标准I/O的效率 99 5.9 二进制I/O 100 5.10 定位流 102 5.11 格式化I/O 103 5.11.1 格式化输出 103 5.11.2 格式化输入 103 5.12 实现细节 104 5.13 临时文件 105 5.14 标准I/O的替代软件 108 5.15 小结 108 习题 108 第6章 系统数据文件和信息 110 6.1 引言 110 6.2 口令文件 110 6.3 阴影口令 112 6.4 组文件 113 6.5 添加组ID 114 6.6 其他数据文件 115 6.7 登录会计 116 6.8 系统标识 116 6.9 时间和日期例程 117 6.10 小结 121 习题 121 第7章 UNIX进程的环境 122 7.1 引言 122 7.2 main 函数 122 7.3 进程终止 122 7.3.1 exit和_exit函数 122 7.3.2 atexit函数 124 7.4 命令行参数 125 7.5 环境表 126 7.6 C程序的存储空间布局 126 7.7 共享库 127 7.8 存储器分配 128 7.9 环境变量 130 7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140 第8章 进程控制 141 8.1 引言 141 8.2 进程标识 141 8.3 fork函数 142 8.4 vfork 函数 145 8.5 exit函数 147 8.6 wait和waitpid函数 148 8.7 wait3和wait4函数 152 8.8 竞态条件 153 8.9 exec函数 156 8.10 更改用户ID和组ID 160 8.10.1 setreuid 和setregid函数 162 8.10.2 seteuid和 setegid函数 163 8.10.3 组ID 163 8.11 解释器文件 164 8.12 system函数 167 8.13 进程会计 171 8.14 用户标识 175 8.15 进程时间 176 8.16 小结 178 习题 178 第9章 进程关系 180 9.1 引言 180 9.2 终端登录 180 9.2.1 4.3+BSD终端登录 180 9.2.2 SVR4终端登录 182 9.3 网络登录 182 9.3.1 4.3+BSD网络登录 182 9.3.2 SVR4网络登录 183 9.4 进程组 183 9.5 对话期 184 9.6 控制终端 185 9.7 tcgetpgrp 和tcsetpgrp函数 187 9.8 作业控制 187 9.9 shell执行程序 189 9.10 孤儿进程组 193 9.11 4.3+BSD实现 195 9.12 小结 197 习题 197 第10章 信号 198 10.1 引言 198 10.2 信号的概念 198 10.3 signal函数 203 10.3.1 程序起动 205 10.3.2 进程创建 206 10.4 不可靠的信号 206 10.5 中断的系统调用 207 10.6 可再入函数 209 10.7 SIGCLD语义 211 10.8 可靠信号术语和语义 213 10.9 kill和raise函数 213 10.10 alarm和pause函数 214 10.11 信号集 219 10.12 sigprocmask 函数 220 10.13 sigpending函数 222 10.14 sigaction函数 223 10.15 sigsetjmp 和siglongjmp函数 226 10.16 sigsuspend函数 229 10.17 abort函数 234 10.18 system函数 235 10.19 sleep函数 240 10.20 作业控制信号 241 10.21 其他特征 243 10.21.1 信号名字 243 10.21.2 SVR4信号处理程序的附 加参数 244 10.21.3 4.3+BSD信号处理程序的附 加参数 244 10.22 小结 244 习题 244 第11章 终端I/O 246 11.1 引言 246 11.2 综述 246 11.3 特殊输入字符 250 11.4 获得和设置终端属性 254 11.5 终端选择标志 254 11.6 stty命令 258 11.7 波特率函数 259 11.8 行控制函数 260 11.9 终端标识 260 11.10 规范方式 263 11.11 非规范方式 266 11.12 终端的窗口大小 270 11.13 termcap, terminfo和 curses 271 11.14 小结 272 习题 272 第12章 高级I/O 273 12.1 引言 273 12.2 非阻塞I/O 273 12.3 记录锁 275 12.3.1 历史 276 12.3.2 fcntl记录锁 276 12.3.3 锁的隐含继承和释放 280 12.3.4 4.3+BSD的实现 281 12.3.5 建议性锁和强制性锁 284 12.4 流 288 12.4.1 流消息 289 12.4.2 putmsg和putpmsg函数 290 12.4.3 流ioctl操作 291 12.4.4 write至流设备 294 12.4.5 写方式 294 12.4.6 getmsg和getpmsg函数 294 12.4.7 读方式 295 12.5 I/O多路转接 296 12.5.1 select函数 298 12.5.2 poll函数 301 12.6 异步I/O 303 12.6.1 SVR4 303 12.6.2 4.3+BSD 303 12.7 readv和writev函数 304 12.8 readn和writen函数 306 12.9 存储映射I/O 307 12.10 小结 311 习题 311 第13章 精灵进程 312 13.1 引言 312 13.2 精灵进程的特征 312 13.3 编程规则 313 13.4 出错记录 314 13.4.1 SVR4流log驱动程序 315 13.4.2 4.3+BSD syslog设施 316 13.5 客户机-服务器模型 319 13.6 小结 319 习题 319 第14章 进程间通信 320 14.1 引言 320 14.2 管道 320 14.3 popen和pclose函数 325 14.4 协同进程 330 14.5 FIFO 333 14.6 系统V IPC 335 14.6.1 标识符和关键字 336 14.6.2 许可权结构 337 14.6.3 结构限制 337 14.6.4 优点和缺点 337 14.7 消息队列 338 14.8 信号量 342 14.9 共享存储 346 14.10 客户机-服务器属性 351 14.11 小结 353 习题 353 第15章 高级进程间通信 355 15.1 引言 355 15.2 流管道 355 15.3 传送文件描述符 358 15.3.1 SVR4 360 15.3.2 4.3BSD 361 15.3.3 4.3+BSD 364 15.4 open服务器第1版 366 15.5 客户机-服务器连接函数 371 15.5.1 SVR4 372 15.5.2 4.3+BSD 375 15.6 open服务器第2版 378 15.7 小结 385 习题 385 第16章 数据库函数库 386 16.1 引言 386 16.2 历史 386 16.3 函数库 386 16.4 实现概述 388 16.5 集中式或非集中式 390 16.6 并发 391 16.6.1 粗锁 391 16.6.2 细锁 391 16.7 源码 392 16.8 性能 409 16.8.1 单进程的结果 410 16.8.2 多进程的结果 410 16.9 小结 412 习题 412 第17章 与PostScript打印机通信 413 17.1 引言 413 17.2 PostScript通信机制 413 17.3 假脱机打印 415 17.4 源码 417 17.5 小结 434 习题 434 第18章 调制解调器拨号器 435 18.1 引言 435 18.2 历史 435 18.3 程序设计 436 18.4 数据文件 437 18.5 服务器设计 439 18.6 服务器源码 439 18.7 客户机设计 463 18.7.1 终端行规程 463 18.7.2 一个进程还是两个进程 464 18.8 客户机源码 465 18.9 小结 474 习题 474 第19章 伪终端 476 19.1 引言 476 19.2 概述 476 19.2.1 网络登录服务器 477 19.2.2 script程序 478 19.2.3 expect程序 479 19.2.4 运行协同进程 479 19.2.5 观看长时间运行程序的输出 479 19.3 打开伪终端设备 480 19.3.1 SVR4 481 19.3.2 4.3+BSD 482 19.4 pty_fork函数 484 19.5 pty程序 486 19.6 使用pty程序 489 19.6.1 utmp文件 489 19.6.2 作业控制交互 489 19.6.3 检查长时间运行程序的输出 491 19.6.4 script程序 491 19.6.5 运行协同进程 492 19.6.6 用非交互模式驱动交互式 程序 492 19.7 其他特性 494 19.7.1 打包模式 494 19.7.2 远程模式 494 19.7.3 窗口大小变化 495 19.7.4 信号发生 495 19.8 小结 495 习题 495 附录A 函数原型 497 附录B 其他源代码 512 附录C 习题答案 518 参考书目 536
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页