首页>参考读物>计算机科学与技术>综合

Windows系统编程(原书第4版)
作者 : (美) Johnson M. Hart 著
译者 : 戴锋 孟庆麟 等译
出版日期 : 2010-09-28
ISBN : 978-7-111-31668-8
定价 : 65.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 397
开本 : 16
原书名 : Windows System Programming, 4E
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书重点突出,是Windows API核心特性和功能的实践指导材料。不像许多其他Windows编程资源,本书着重探讨Windows核心系统服务,如文件系统、内存、进程和线程、同步、通信以及安全性,新修订版中涵盖了新的API函数、网络编程、Windows服务、进程和线程管理、同步以及单处理器和多处理器的程序性能,同时还描述了如何向Win64移植程序。
本书尤其适合那些已经熟悉UNIX或者其他高端操作系统的读者,阅读本书还有助于丰富知识,快速而轻松地学习许多重要特性。
本书新版包含了对64位编程、并行开发、多核系统以及众多关键主题的扩展。作者的健壮的代码示例已经彻底更新。针对32位和64位版本分别调试,在单核系统和多核系统上,并且针对Windows 7、Vista和Server 2008、Windows XP等多个版本。

图书特色

Windows系统编程(原书第4版)
Windows System Programming (4th Edition)
(美) Johnson M. Hart   著
戴锋 陈征 等译

封面:
经典Windows系统编程教科书
Windows API编程权威指南
针对Windows 7、Windows Server 2008和Windows Vista全面更新

封底:
“如果你正在编写本地Win32程序,或者只是想了解操作系统在底层到底做了些什么,那么你需要阅读这本书。它讲解了真正的系统程序员绝对必须知道的知识。”
—— Chris Sells,Microsoft公司
“本书很好地综合了Vista、Windows Server 2008和Windows 7 API的新特性,当然,它也很好地讲解了构建针对Windows操作系统的应用程序的基本元素。”
—— Jason Beres,Infragistics产品经理

本书是Windows API编程的参考指南,内容针对Windows 7、Windows Server 2008和Windows Vista进行了更新。
本书广泛地讲解了64位编程、并行性、多核系统等新的关键主题,并更新和优化了全部代码示例——分别在32位和64位的单处理器和多处理器系统以及Windows 7、Vista、Windows Server 2008和Windows XP下进行了调试和测试。为了讲解程序的运行,本书使用数十个屏幕截图来演示示例程序的结果。
作者系统地讲解了API层面的Windows外部信息,展示了Windows程序员所需的所有知识,并且强调了Windows函数的实际行为以及与实际应用程序的交互。作者从用于单处理器应用程序的特性开始,逐渐深入讲解更为复杂的函数以及多线程环境。本书包含的主题有:文件系统、内存管理、异常、进程、线程、同步、进程间通信、Windows服务以及安全。

本版的更新内容:
在多核系统中利用并行性且最大化其性能。
促进Windows、Linux和UNIX之间的源代码的可移植性以及应用程序的互操作性。
使用64位地址空间并确保64位或32位的可移植性。
使用线程、线程池和完成端口来改进性能和可伸缩性。
用于在所有系统中改进程序可靠性和性能的技术。
介绍从Windows Vista开始就具备的Windows性能增强API特性,比如轻量级读与写锁和条件变量。

作者简介
Johnson M. Hart 是一位顾问,专攻Microsoft Windows和.NET应用程序开发、开放系统计算、技术培训和写作以及软件工程等领域。作为软件工程师、经理、工程主管以及Cilk Arts公司、Sierra Atlantic、HP和Apollo Computer的高级技术顾问,他有超过25年的经验。他曾在肯塔基大学做过9年的计算机科学教授,并且是本书四个版本的作者。

图书前言

本书描述使用Microsoft Windows应用程序编程接口(Application Programming Ingterface,API)进行应用程序开发的方法,专注于文件系统、进程和线程管理、进程间通信、网络编程以及同步等核心系统服务。本书的示例都来自现实场景,其中有许多是基于作者在实践中所开发的真实应用程序。
  Microsoft的32位和64位操作系统家族(目前广泛使用的版本包括Windows 7、Vista、XP、Server 2003、Server 2008以及CE)支持Win32/Win64 API(也就是Windows API)。更早一些的Windows家族成员有Windows 2000、NT、Me、98和95,虽然这些系统已经过时,但本书中的许多主题仍旧适合于这些老系统。
  Windows API是应用程序开发的重要因素,经常代替POSIX API(UNIX和Linux支持它)作为桌面、服务器和嵌入式系统应用程序开发的API,不仅现在如此,将来也是如此。许多程序员,无论经验如何,都想快速学习Windows API,而本书正是为他们所写的。
目标和方法
  本书的目标是:在不给读者过多不必要的细节的情况下尽可能快地讲解Windows是什么以及如何在实际中使用它。本书不是一本参考指南,而是讲解那些最重要的函数的核心特性,并且展示如何在实际编程中将它们一起使用。有了这些知识,读者就可以通过广泛的Microsoft参考文档来探究更多细节和更高级的选项,根据需求或兴趣探究更为隐秘的功能。这种方法会让Windows API的学习更为容易,而且让开发Windows程序成为一种享受,即使偶尔也会有挫折。这种热情将时不时地显露出来。当然,Windows并不一定比其他操作系统API更好,但它的确有许多引人入胜的特性,而且随着每个新版本的推出都得到极大的改进。
  许多Windows书籍用大量篇幅讲述进程、虚拟内存、进程间通信和抢占式调度,却没有展示在实际情况下如何使用它们。有UNIX、Linux、IBM MVS或其他操作系统经验的程序员对这些概念并不陌生,他们会急于了解如何在Windows中实现它们。大多数Windows书籍也会在用户界面编程这一重要主题上占用大量篇幅。本书有意避开用户界面的问题,而仅讨论简单的基于字符的控制台I/O,以便专注于重要的核心功能。
  Windows只是一套操作系统API,提供了清晰明了的功能集合。许多程序员,无论经验如何,都需要快速学习Windows。而且,对于在Microsoft.NET Framework上进行开发的程序员而言,如果能够理解Windows API,那将是非常宝贵的背景知识。
  当我们将Windows系统与其他系统做比较时,从特性和质量上看会有好的、坏的以及不相上下的结果。最新的版本(Windows 7、Vista、Server 2008)提供了新的特性,比如条件变量(condition variable),既改进了性能也简化了编程。本书的目的在于展示如何高效地在现实中使用这些特性来开发高质量、高性能的应用程序。
读者对象
  感谢不同的目标读者提供了有价值的建议、想法和反馈,这些读者包括:
   任何想快速学习Windows应用程序开发的人,无论以前有无经验。
   想要将现有Linux或UNIX(POSIX API)应用程序移植到Windows的程序员与软件工程师。源代码经常需要继续支持POSIX,也就是说,源代码需要有可移植性。本书经常比较Windows、POSIX和标准C库函数和编程模型。
   开始进行新项目的开发人员。他们不受移植现有代码的限制,程序设计和实现的许多方面都包括在内,可以使用Windows函数来创建有用的应用程序和解决常见的编程问题。
   需要理解Windows能力和原理的应用程序架构师和设计师。
   使用COM和.NET Framework的程序员。如果需要理解动态链接库(DLL)、线程的使用和模型、接口以及同步问题,他们将从本书中受益良多。
   计算机科学专业学习系统编程或应用程序开发课程的高年级本科生或低年级研究生。本书对于那些正在学习多线程编程或需要构建联网应用程序的人也有帮助。本书将与《Advanced Programming in the UNIX Environment》(由W. Richard Stevens和Stephen A. Rago著)这样的经典书籍互补,学生可以借此比较Windows和UNIX。学习操作系统课程的学生会发现本书是有用的补充,因为它阐明了重要的商业操作系统提供实质功能的方法。
  本书惟一的假定是读者要有C或C++编程知识。
Windows自上个版本以来的发展
  本书第1版名为《Win32 System Programming》,出版于1997年,后来又出版了第2版(2000年)和第3版(2004年)。自这些版本出版至今,很多内容发生了变化,而Windows则是快速发展中的计算技术的一部分。编写第4版的主要因素如下:
   Windows API极为稳定。编写于1997年的程序仍能运行于最新的Windows版本上,现在甚至是多年前学习的Windows技能对于未来的数十年而言仍将是有价值的。
   无论如何,API扩展了,有了新的功能与函数,有时是强制性的。例如,在以下几个方面:1)易于处理大文件和大的64位地址空间的能力;2)线程池;3)新的能够高效解决重要的同步问题的条件变量。
   Windows的规模小至电话、手持和嵌入式设备,大到笔记本电脑和桌面系统,甚至是最大的服务器。
   Windows从1997年所需要的不算苛刻的资源(16MB内存和250MB空闲硬盘空间)开始扩展,在数量级更大、更快却更便宜(通常来说)的系统上高效运转。
   64位系统、多核处理器和大文件系统随处可见,应用程序必须能够用上这样的系统。通常,程序还必须能够继续运行于32位系统上。
第4版中的变化
  第4版提供了大量新材料,更新并重新组织了原来的内容,以便适应最新的进展,主要表现在以下各方面:
   覆盖了Windows 7、Vista和Server 2008的新特性。
   通过屏幕截图来演示示例程序的操作和性能。
   描述并阐明能够确保相关应用程序伸缩到64位系统上运行并使用大文件的技术。全书中的改进都涉及这个问题。
   去除了对Windows 95、98和Me(即“Windows 9x”家族)和NT等其他过时系统的讨论。程序示例默认采用当前Windows版本所支持的特性。
   对线程、同步和并行计算的讨论做了改进,包括性能、可伸缩性和可靠性方面的考虑。
   强调运行高性能、可伸缩、多线程应用程序的Windows服务器的重要角色和新特性。
   学习不同的程序设计之间的性能问题(performance implication),尤其是运行于多核系统上的带有同步和并行能力的文件访问和多线程应用程序。
   讲解源代码的可移植性,以便确保能在Windows、Linux和UNIX操作系统上运行。附录B对原来的版本做了改进,以便为需要构建运行于多目标平台上的代码(通常是服务器应用程序)的那些人提供帮助。
   加入了大量来自优秀读者和评审者的反馈,减少了瑕疵,改进了讲解方式、组织结构以及大量细节信息。
组织结构
  本书按主题来组织章节,首先讲解单线程应用程序所需的功能,而后讲解进程和线程管理功能,最后讲解多线程环境中的网络编程。这样组织使得读者可以按以下逻辑顺序阅读:先是文件系统、内存管理和文件映射,然后是进程、线程和同步,最后是进程间通信、网络通信与安全。这样组织也让我们可以以自然的方式演示示例,就如开发人员可能一开始创建一个简单的原型而后添加更多功能那样。高级特性,比如异步I/O和安全性,将在最后出现。
  每一章都是先对功能域进行介绍,比如进程管理或内存映射文件,然后再详细讨论重要的Windows函数及其关系。随后是说明性的示例。文中仅列出关键程序段,完整的项目、程序、包含文件、实用函数和文档可在本书的Web站点(www.jmhartsoftware.com)下载。本书仅给出当前Windows版本所支持的功能。每章都会给出相关的阅读建议并提供一些习题,许多习题涉及的是文中不包含但有趣且重要的问题,而另外一些习题则为读者探究高级或特定主题给出了建议。
  第1章是对Windows操作系统家族和Windows的初步介绍。我们通过一个简单的示例程序来展示Windows编程风格的基本元素,并且为讲述更高级的Windows特性奠定基础。Win64兼容性问题从第1章就开始引入,并将贯穿全书。
  第2章和第3章的内容与文件系统、控制台I/O、文件锁和目录管理有关。Unicode(Windows所用的扩展字符集)也在第2章介绍。本章的示例包括顺序和直接文件处理、目录遍历和管理。第3章最后讨论注册表管理编程,它在许多方面与文件管理和目录管理相似。
  第4章介绍Windows异常处理,包括在本书中广泛使用的结构化异常处理(Structured Exception Handling,SEH)。早一些介绍SEH,就可以在全书中使用SEH简化一些编程任务并提高质量。本章也描述了向量化异常处理(vectored exception handling)。
  第5章探讨Windows内存管理并展示使用内存映射文件来简化编程、提高性能的方法。本章也讲解DLL。本章还有一个在32位和64位系统中分别比较内存映射文件访问与普通文件I/O之间的性能与可伸缩性的示例。
  第6章介绍Windows进程、进程管理和简单的进程同步。第7章描述线程管理并介绍并行性,以便利用多处理器系统。每一章的示例展示了使用线程和进程所带来的许多好处,其中包括程序简单性和性能改进。
  第8、9和10章广泛、深入地探讨了Windows线程同步、线程池和性能方面的问题。这些主题比较复杂,所以这些章节使用广泛的示例和清晰明了的模型来帮助读者既获得线程所带来的编程和性能上的好处,又避免落入许多陷阱之中。新加入的材料包括新的功能以及性能和可伸缩性问题,这在构建包括那些将在多处理器系统上运行的基于服务器的应用程序时非常重要。
  第11章和第12章讨论进程间和线程间的通信以及联网。第11章关注完全属于Windows的部分,也就是匿名管道、命名管道和邮槽。第12章讨论Windows套接字,这是可以与使用业内标准协议(主要是TCP/IP)的非Windows系统互操作的技术。Windows套接字严格上说并不属于Windows API的一部分,它提供网络和Internet通信以及可互操作性,这也与本书剩余部分的主旨一致。我们使用一个多线程的客户/服务器系统来演示使用进程间通信和线程的方法。
  第13章描述Windows如何允许服务器应用程序(比如,第11章和第12章创建的)转换成可以作为后台服务程序管理的Windows服务(Windows Service)。进行一些小改动就可将服务程序转换成服务。
  第14章展示使用带有事件和完成例程的重叠I/O执行异步I/O的方法。这也可以使用线程来实现,所以我们提供了比较不同解决方案的简单性和性能的示例。此外,对于Windows Vista而言,完成例程提供了非常优秀的性能。对于某些可伸缩的多线程服务器而言,与此紧密相关的I/O完成端口很有用,所以前面章节中的服务器程序就阐明了这个特性。最后一个主题是可等待的计时器,它需要本章前面介绍的概念。
  第15章简要讲解了Windows对象安全性,并且以一个示例展示了模拟UNIX风格的文件权限的方法。另外还有一些示例展示如何为进程、线程和命名管道提供安全。如此一来,就可以酌情对早先的示例进行安全升级。
  本书有三个附录。附录A描述可从本书Web站点(www.jmhartsoftware.com)下载的示例代码。附录B展示如何创建可以运行于POSIX(Linux与UNIX)系统中的源代码,对于服务器应用程序和那些不仅仅需要支持Windows系统的组织来说很有用。附录C比较了文中一些示例的不同实现的性能,以便读者在Windows的基本特性和高级特性之间取舍。
UNIX和C库的注释和表
  我们会在书中适当的地方将Windows风格和功能与同类的POSIX(UNIX和Linux)和ANSI标准C库功能进行对比。附录B回顾源代码的可移植性并包含一个列出这些同类函数的表。包含这些内容有两个主要理由:
   许多人熟悉UNIX或Linux,而且有兴趣对比这两个系统。如果读者没有UNIX/Linux背景,可跳过书中的这些内容。
   对于许多开发人员和组织而言,源代码可移植性很重要。
示例
  示例的设计旨在:
   演示Windows函数常见的、有代表性的以及有用的应用。
   与在程序开发、咨询和培训中所遇到的真实编程情况相联系。一些客户以及参加我的课程的人基于这些示例开发他们自己的系统。在提供咨询时,我经常碰到与示例中所用的代码相似的代码,有几次还碰到从前一版本的书中直接取来或经过修改的代码(读者可随意这样做,如果能在文档中致谢我将不胜感激)。此代码经常作为COM、.NET或C++对象的一部分。由于时间和空间的限制,这些示例是“真实世界”的示例并且解决“真实世界”的问题。
   强调函数的实际行为以及与实际应用程序的交互,这与读者在阅读了文档之后所想到的并不总是一致。本书中的正文和示例都专注于函数间的交互,而不是函数本身。
   增长与扩张,既以自然的方式对前面的解决方案添加新功能,又探究可选的其他实现技术。
   实现UNIX/Linux命令,比如ls、touch、chmod和sort,这样既以熟悉的上下文展示Windows函数,又创建一组有用的工具1许多商业和开源产品提供了完整的UNIX/Linux工具集,我们并不想对此补充。这些示例虽然有用,但主要目的是阐明Windows的使用。即使对UNIX或Linux不熟悉的人,在理解这些程序及其功能时也不会有任何困难。。对相同命令的不同实现也让我们可以很容易地对高级Windows特性所具有的性能优势进行比较。附录C包含性能测试结果。
  前面章节中的示例通常较短,后面章节中的示例会适当长一些。
  每章末尾的习题提供可研究的另一种设计、主题,以及额外的、超出本书范围但却是重要的功能。有些习题很容易,而有一些则颇具挑战性。我们经常给出清楚标注的有瑕疵的解决方案,因为解决错误是提高技能的好方法。
  所有的示例都在Windows 7、Vista、Server 2008、XP以及更早的系统下调试、测试过。测试包括32位和64位两个版本。所有程序也都在单处理器和多处理器系统下测试过,最多用到16个处理器。客户/服务器应用程序的测试使用了多个客户同时与服务器交互。但是,我们并不对程序的正确性、完整性或者针对任何目的的适用性提供保证。毫无疑问,即使是最简单的示例也包含瑕疵或者在某些情况下会出错,这是几乎所有软件的共性。但是,如果能将任何与程序瑕疵有关的信息提供给我,我将甚为感激;如果能有这些瑕疵的修改建议则更为理想,我会将这些信息张贴在本书的Web站点上,以便让所有人受益。
Web站点
  本书的Web站点(www.jmhartsoftware.com)包含可下载的示例文件,其中包括书中所有示例的完整代码和项目、一些习题答案、可选的实现方法、教学以及性能评估测试。这些材料将定期更新,以便把新材料和修正包括进来。
  这个站点还包括本书的勘误表、更多的示例等。本站点也包含PowerPoint幻灯片,可用于非商业性的教学目的。我在专业培训课程中多次使用这些幻灯片,它们也适用于大学课程。
  在瑕疵得到修正以及收到新内容时,这些材料会进行更新。如果读者对程序或书中的任何材料有疑问,请先查看本站点上是否有修正或解释。如果没有,请发电子邮件至jmh_assoc@hotmail.com或jmhart62@gmail.com。
致谢
  在我准备第4版期间,许多人给了我帮助、建议和鼓励,读者提供了许多重要的想法并纠正了许多错误。本书Web站点对为第4版的编写做出重要贡献的人表示了感谢,而前三个版本则对早先有贡献的人表示了感谢。完整的列表请参阅Web站点。
  对以下三位评审者的深度评论、耐心、优秀建议和深入的专业知识致以深深的谢意:Chris Sells、Jason Beres和Raymond Chen。他们(尤其是Raymond Chen)对本书的改进做出了重大的贡献。我尽最大努力来展现他们的观点和无价的内容。
  需要特别感谢的还有许多朋友和同事。多年以来,我从他们身上受益良多,他们的许多想法以各种形式融入到本书之中。他们也慷慨地为测试系统提供了访问权限。我尤其想感谢我在Sierra Atlantic、Cilk Arts(现在是Intel的一部分)、Vault USA和Rimes Technologies的朋友们。
  排版员Anne H.Smith用她的技艺、执着和耐心为这一新版本的出版进行了准备,没有她的协助,本书就不可能完成。Anne和她的丈夫Kerry也慷慨地在他们的设备上测试了示例程序。
  Addison-Wesley的员工展现出的职业精神和专业技能让作者的工作成为一种乐趣。编辑Joan Murray和主任编辑Karen Gettman从本项目之初就一起工作,确保项目按部就班地顺畅进行。助理编辑Olivia Basegio对整个过程进行了管理,生产部门的John Fuller和Elizabeth Ryan让本书的面世过程看起来是如此简单。项目编辑Anna Popick为最终的编辑工作和日程表给予了指导。文字编辑和校对人员Carol Lallier和Lori Newhouse为本书的可读性和一致性做出了重要贡献。

上架指导

计算机\程序设计

封底文字

“如果你正在编写本地Win32程序,或者只是想了解操作系统在底层到底做了些什么,那么你需要阅读John的书。他讲解了真正的系统程序员绝对必须知道的东西。我推荐他的书。”
——Chris Sells,Microsoft公司

“本书很好地集成了Vista、Windows 2008和Windows 7 API的新特性,当然,它也很好地讲解了构建以Windows操作系统为目标的应用程序的基本元素。”
——Jason Beres,Infragistics产品管理

本书是Windows API编程的参考指南,内容已经完全针对Windows 7、Windows Server 2008和Windows Vista进行了更新。

本书对64位编程、并行性、多核系统以及许多其他关键主题进行了广泛、全新的讲解。本书的代码示例全部经过更新和优化。这些代码分别在32位和64位版本的单处理器和多处理器系统以及Windows 7、Vista、Server 2008和Windows XP下进行了调试和测试。为了讲解程序的操作,本书使用数十个屏幕截图来演示示例程序的结果。

Hart系统地讲解了API层面的Windows外部信息,为Windows程序员所需的所有一切提供实用的讲解,并且强调Windows函数的实际行为以及与真实世界中的应用程序的交互。Hart从用于单处理器应用程序的特性开始,逐渐深入讲解更为复杂的函数以及多线程环境。本书包含的主题有:文件系统、内存管理、异常、进程、线程、同步、进程间通信、Windows服务以及安全。

本版本的更新内容:
在多核系统中利用并行性且最大化性能
促进Windows、Linux和UNIX之间的源代码的可移植性以及应用程序的可互操作性
使用64位地址空间并确保64位或32位的可移植性
使用线程、线程池和完成端口来改进性能和可伸缩性
用于在所有系统中改进程序可靠性和性能的技术
介绍从Windows Vista开始就具备的Windows性能增强API特性,比如轻量级读/写锁和条件变量

配套Web站点(jmhartsoftware.com)包含所有示例代码、Visual Studio项目、额外的示例、勘误表、读者评论以及对Windows的评论和讨论。

作者简介

(美) Johnson M. Hart 著:Johnson M. Hart是一位Microsoft Windows和.NET应用程序开发、开放系统计算、技术培训和写作以及软件工程领域的顾问。作为软件工程师、经理、工程主管和Cilk Arts公司、Sierra Atlantic、Hewlett-Packard和Apollo Computer的高级技术顾问,他已有超过25年的经验。他曾在肯塔基大学担任9年的计算机科学教授,并且是本书四个版本的作者。

译者简介

戴锋 孟庆麟 等译:暂无简介

译者序

在当今的应用程序开发领域,Web方面热闹非凡,大量基于Web的应用层出不穷,大有替代桌面系统的趋势。但在其热闹的背后,只要我们冷静下来就不难发现,无论世界如何变化,应用软件怎能离开操作系统的支持?而当我们提及Windows操作系统时,则无法不冠之以“优秀”两个字。
  学习Windows编程接口、熟悉Windows的编程特性,是想为Windows编写应用程序的所有程序员不能不做的事情。本书就是一本介绍Windows编程接口的书,涵盖Windows内核的各个方面,从简单的文件系统到颇为复杂的进程间通信和同步问题,甚至是NT 6内核的新特性。
  无论读者使用的是Windows API还是MFC/ATL等类库甚至是.NET Framework来编写Windows应用程序,本书都是极为难得的参考材料。对于UNIX/Linux程序员,本书也有一定的参考价值。
  参加本书翻译的人员有:戴锋、孟庆麟、陈征、陈宗斌、许瑛琪、张景友、易小丽、陈婷、管学岗、王新彦、金惠敏、张海峰、徐晔、张德福、张士华、张锁玲、杜明宗、高玉琢、王涛、申川、孙玲等。
  由于时间紧迫,加之译者水平有限,错误在所难免,恳请广大读者批评指正。

图书目录

译者序
前言
作者简介
第1章Windows初步1
1.1操作系统必备功能1
1.2Windows的演化2
1.3Windows版本2
1.3.1过时的Windows先前版本2
1.3.2Windows NT5和NT63
1.3.3处理器支持3
1.4Windows的市场角色3
1.5Windows、标准以及开放系统4
1.6Windows准则5
1.732位和64位源代码可移植性6
1.8标准C库:何时用它来处理文件7
1.9使用本书所需的条件7
1.9.1为什么使用C而不是C++7
1.9.2使用示例7
1.10示例:一个简单的顺序文件复制程序8
1.10.1使用C库的文件复制9
1.10.2使用Windows的文件复制11
1.10.3使用Windows便利函数的
文件复制12
1.11小结13
1.11.1前瞻14
1.11.2附加阅读14
1.12习题15
第2章使用Windows文件系统和
字符I/O16
2.1Windows文件系统16
2.2文件命名17
2.3文件的打开、读取、写入以及关闭17
2.3.1文件的创建和打开17
2.3.2关闭文件19
2.3.3读文件20
2.3.4写文件21
2.4Unicode和通用字符21
2.4.1另一种通用字符串处理函数22
2.4.2通用Main函数23
2.4.3函数定义23
2.5Unicode策略23
2.6示例:错误处理23
2.7标准设备25
2.8示例:将多个文件复制到标准输出26
2.9示例:简单的文件加密27
2.10文件和目录管理29
2.10.1文件管理29
2.10.2目录管理31
2.11控制台I/O32
2.12示例:打印和提示33
2.13示例:打印当前目录35
2.14小结36
2.14.1前瞻36
2.14.2附加阅读36
2.15习题36
第3章高级文件、目录处理与注册表38
3.164位文件系统38
3.2文件指针38
3.2.164位算术39
3.2.2使用重叠结构来指定文件位置40
3.3获得文件尺寸41
3.4示例:随机记录更新41
3.5文件属性和目录处理45
3.5.1路径名46
3.5.2其他用于获得文件和目录属性的方法46
3.5.3临时文件名47
3.6示例:列出文件属性47
3.7示例:设置文件时间50
3.8文件处理策略51
3.9文件锁52
3.9.1释放文件锁54
3.9.2锁逻辑的后果54
3.10注册表55
3.11注册表管理56
3.11.1项管理57
3.11.2值和数据管理58
3.12示例:列出注册表项及其内容59
3.13小结62
3.13.1前瞻62
3.13.2附加阅读62
3.14习题62
第4章异常处理64
4.1异常及其处理程序64
4.1.1Try和Except块64
4.1.2过滤表达式及其值66
4.1.3异常代码67
4.1.4小结:异常处理顺序68
4.2浮点异常69
4.3错误和异常70
4.4示例:以异常方式处理错误71
4.5终止处理程序72
4.5.1离开try块72
4.5.2非正常终止73
4.5.3执行并离开终止处理程序73
4.5.4组合finally和except块73
4.5.5全局和局部解开74
4.5.6终止处理程序:进程和线程
终止74
4.5.7SEH和C++异常处理74
4.6示例:使用终止处理程序来改进程序质量74
4.7示例:使用过滤函数77
4.8控制台控制处理程序79
4.9示例:一个控制台控制处理程序80
4.10向量化异常处理82
4.11小结82
4.12习题83
第5章内存管理、内存映射文件和DLL84
5.1Windows内存管理架构84
5.2堆86
5.3管理堆内存88
5.3.1HeapAlloc88
5.3.2HeapFree89
5.3.3HeapReAlloc89
5.3.4HeapSize89
5.3.5更多关于序列化与异常标志的信息90
5.3.6其他堆函数90
5.3.7小结:堆管理91
5.4示例:使用二叉搜索树对文件进行排序91
5.5内存映射文件95
5.5.1文件映射对象96
5.5.2将对象映射到进程地址空间97
5.5.3文件映射的限制99
5.5.4小结:文件映射100
5.6示例:使用映射文件进行顺序文件处理100
5.7示例:对内存映射文件排序102
5.8基指针104
5.9示例:使用基指针104
5.10动态链接库108
5.10.1静态库和动态库108
5.10.2隐式链接109
5.10.3显式链接111
5.11示例:显式链接文件转换函数112
5.12DLL进入点113
5.13DLL版本管理114
5.14小结115
5.14.1前瞻115
5.14.2附加阅读115
5.15习题115
第6章进程管理117
6.1Windows进程和线程117
6.2进程创建118
6.2.1指定可执行映像和命令行120
6.2.2可继承句柄121
6.3进程标识122
6.4复制句柄123
6.5进程的退出与终止124
6.6等待进程终止125
6.7环境块和字符串125
6.8示例:并行模式搜索126
6.9多处理器环境中的进程129
6.10进程执行时间130
6.11示例:进程执行时间130
6.12生成控制台控制事件131
6.13示例:简单的作业管理132
6.13.1创建一个后台作业132
6.13.2获取作业号135
6.13.3列出背景作业136
6.13.4在作业清单文件中查找作业137
6.13.5作业对象138
6.14示例:使用作业对象139
6.15小结142
6.16习题142
第7章线程和调度144
7.1线程概述144
7.2线程基础145
7.3线程管理146
7.3.1CreateThread146
7.3.2ExitThread147
7.3.3GetExitCodeThread147
7.3.4线程标识147
7.3.5更多线程管理函数147
7.3.6挂起以及恢复线程148
7.3.7等待线程终止148
7.4在线程中使用C库148
7.5示例:多线程的模式搜索149
7.6性能影响152
7.7老板/工人和其他线程模型152
7.8示例:合并排序——利用多处理器152
7.9程序并行性简介157
7.10线程本地存储158
7.11进程和线程优先级以及调度159
7.12线程状态160
7.13陷阱和常见错误162
7.14计时等待163
7.15纤程163
7.16小结165
7.16.1前瞻165
7.16.2附加阅读165
7.17习题165
第8章线程同步167
8.1线程同步之需167
8.1.1临界代码区域168
8.1.2临界代码区域问题的有瑕疵的解决方案168
8.1.3volatile存储169
8.1.4内存架构和内存屏障169
8.1.5互锁函数:介绍171
8.1.6局部和全局存储171
8.1.7小结:线程安全的代码172
8.2线程同步对象173
8.3CRITICAL_SECTION对象173
8.4用于保护共享变量的CRITICAL_SECTION174
8.5示例:一个简单的生产者/消费者系统176
8.6互斥量180
8.6.1被放弃的互斥量181
8.6.2互斥量、CRITICAL_SECTION以及死锁181
8.6.3复习:互斥量与CRITICAL_SECTION对比183
8.6.4堆锁183
8.7信号量183
8.7.1使用信号量184
8.7.2信号量的限制184
8.8事件185
8.9示例:一个生产者/消费者系统187
8.9.1复习:Windows同步对象189
8.9.2消息和对象等待190
8.10更多互斥量和CRITICAL_SECTION的指导原则190
8.11更多互锁函数191
8.12内存管理性能的考虑192
8.13小结192
8.13.1前瞻192
8.13.2附加阅读192
8.14 习题192
第9章 锁、性能以及NT6增强194
9.1 同步性能影响194
9.2 用于性能试验的模型程序197
9.3 使用CS自旋数来调整多处理器性能198
9.4 NT6轻量级读/写锁199
9.5 减少线程竞争的线程池200
9.6 I/O完成端口202
9.7 NT6线程池203
9.7.1 CreateThreadpoolWork 203
9.7.2 SubmitThreadpoolWork 204
9.7.3 WaitForThreadpoolWork-Callbacks 204
9.7.4 CloseThreadpoolWork 204
9.7.5 回调函数204
9.7.6 将回调提交给线程池207
9.7.7 线程池环境207
9.7.8 进程线程池207
9.7.9 其他线程池回调类型208
9.8 小结:锁性能208
9.9 再论并行性208
9.9.1 更好的基础以及扩展中的并行程序技术209
9.9.2 并行编程的可选方法209
9.9.3 并行性框架209
9.9.4 不要忘了挑战的存在210
9.10 处理器亲和性210
9.10.1 系统、进程与线程亲和性掩码211
9.10.2 查找处理器数量212
9.11 性能指导原则和陷阱212
9.12 小结213
9.12.1 前瞻213
9.12.2 附加阅读213
9.13 习题213
第10章 高级线程同步215
10.1 条件变量模型和安全性能215
10.1.1 一起使用事件和互斥量215
10.1.2 条件变量模型216
10.1.3 条件变量模型的使用218
10.2 使用SignalObjectAndWait219
10.3 示例:阀值屏障对象220
10.4 队列对象223
10.5 示例:在多阶段管线中使用队列226
10.6 Windows NT6条件变量233
10.7 异步过程调用236
10.8 异步过程调用的排队236
10.9 可报警的等待状态237
10.10 安全的线程取消239
10.11 为了应用程序的可移植而使用Pthreads239
10.12 线程堆栈和线程数239
10.13 关于设计、调试和测试的提示240
10.14 Windows API之外241
10.15 小结241
10.15.1 前瞻242
10.15.2 附加阅读242
10.16 习题242
第11章 进程间通信244
11.1 匿名管道244
11.2 示例:使用匿名管道进行I/O重定向245
11.3 命名管道247
11.3.1 使用命名管道248
11.3.2 创建命名管道248
11.3.3 命名管道客户连接249
11.3.4 命名管道状态函数250
11.3.5 命名管道连接函数250
11.3.6 客户和服务器的命名管道连接250
11.4 命名管道事务函数251
11.5 示例:客户/服务器命令行处理程序253
11.6 关于客户/服务器命令行处理程序的注释258
11.7 邮槽259
11.7.1 使用邮槽260
11.7.2 创建和打开邮槽260
11.8 管道和邮槽的创建、连接和命名261
11.9 示例:客户可定位的服务器262
11.10 小结264
11.11 习题264
第12章 使用Windows套接字进行网络编程265
12.1 Windows套接字265
12.1.1 Winsock初始化266
12.1.2 创建套接字266
12.2 套接字服务器函数267
12.2.1 绑定套接字267
12.2.2 将绑定的套接字置于侦听状态268
12.2.3 接受客户连接268
12.2.4 断开以及关闭套接字268
12.2.5 示例:准备并接受客户连接269
12.3 套接字客户函数270
12.3.1 连接服务器270
12.3.2 示例:客户连接服务器270
12.3.3 发送和接收数据270
12.4 命名管道和套接字之对比271
12.4.1 命名管道与套接字服务器之比较271
12.4.2 命名管道与套接字客户之比较271
12.5 示例:套接字消息接收函数271
12.6 示例:基于套接字的客户272
12.7 示例:基于套接字的、带有新特性的服务器274
12.7.1 主程序275
12.7.2 服务器线程278
12.7.3 运行套接字服务器279
12.7.4 安全注释280
12.8 进程内服务器280
12.9 面向行的消息、DLL进入点以及TLS282
12.10 示例:线程安全的套接字消息DLL283
12.11 示例:另一种线程安全的DLL策略286
12.12 数据报289
12.12.1 数据报广播289
12.12.2 使用数据报进行远程过程调用289
12.13 Berkeley套接字和Windows套接字的比较290
12.14 Windows套接字使用重叠I/O290
12.15 Windows套接字的额外特性290
12.16 小结290
12.16.1 前瞻290
12.16.2 附加阅读291
12.17 习题291
第13章 Windows服务293
13.1 概述:编写Windows服务293
13.2 main()函数294
13.3 ServiceMain()函数294
13.3.1 注册服务控制处理程序295
13.3.2 设置服务状态295
13.3.3 SERVICE_STATUS结构296
13.3.4 服务特定的代码297
13.4 服务控制处理程序297
13.5 事件记录298
13.6 示例:服务“包装器”298
13.7 管理Windows服务302
13.7.1 打开SCM303
13.7.2 创建和删除服务303
13.7.3 启动服务304
13.7.4 控制服务304
13.7.5 查询服务状态305
13.7.6 小结:服务操作和管理305
13.8 示例:服务控制Shell305
13.9 与服务共享内核对象309
13.10 调试服务时的注意事项309
13.11 小结310
13.11.1 前瞻310
13.11.2 附加阅读310
13.12 习题310
第14章 异步输入/输出与完成端口311
14.1 Windows异步I/O概述311
14.2 重叠I/O312
14.2.1 重叠I/O的后果312
14.2.2 重叠结构313
14.2.3 重叠I/O状态313
14.2.4 取消重叠I/O操作314
14.3 示例:在一个文件句柄之上同步314
14.4 示例:使用重叠I/O和多缓冲区进行文件转换315
14.5 使用完成例程的扩展I/O318
14.5.1 ReadFileEx、WriteFileEx和完成例程318
14.5.2 可报警的等待函数319
14.5.3 完成例程的执行和可报警等待的返回320
14.6 示例:使用扩展I/O的文件转换321
14.7 使用线程的异步I/O324
14.8 可等待定时器324
14.9 示例:使用可等待定时器325
14.9.1 可等待定时器示例的注释327
14.9.2 线程池定时器327
14.10 I/O完成端口327
14.10.1 管理I/O完成端口328
14.10.2 等待I/O完成端口328
14.10.3 邮发给I/O完成端口329
14.10.4 I/O完成端口的替代329
14.11 示例:使用I/O完成端口的服务器329
14.12 小结335
14.13 习题335
第15章 Windows对象的安全337
15.1 安全属性337
15.2 安全性概述:安全描述符338
15.2.1 访问控制列表338
15.2.2 使用Windows对象安全性339
15.2.3 对象权限和对象访问339
15.2.4 安全描述符初始化339
15.3 安全描述符控制标志339
15.4 安全标识符340
15.5 管理ACL341
15.6 示例:NTFS文件的UNIX风格的权限342
15.7 示例:初始化安全属性345
15.8 安全描述符的读与更改347
15.9 示例:读取文件权限349
15.10 示例:更改文件权限350
15.11 给内核和通信对象施加安全350
15.11.1 给命名管道施加安全350
15.11.2 内核与私有对象的安全性351
15.11.3 ACE掩码值351
15.12 示例:给进程及其线程施加安全352
15.13 其他安全特性的概述352
15.13.1 移除ACE352
15.13.2 绝对的和自相关的安全描述符352
15.13.3 系统ACL352
15.13.4 访问令牌信息353
15.13.5 SID管理353
15.14 小结353
15.14.1 前瞻353
15.14.2 附加阅读353
15.15 习题353
附录A 使用示例程序355
附录B 源代码可移植性:Windows、UNIX和Linux357
附录C 性能结果370
参考文献379

教学资源推荐
作者: 周国烛 杨洪雪 主编
作者: (美)塞巴斯蒂安·拉施卡(Sebastian Raschka),瓦希德·米尔贾利利(Vahid Mirjalili)著
作者: 王恺,路明晓,于刚,张月久 编著
作者: (美)Jeffrey A. Hoffer Mary B. Prescott
参考读物推荐
作者: Douglas E.Comer
作者: (美)Jean J.Labrosse
作者: 李占英 姚丽君 梅彦平 等编著