⚙️ 第九章 操作系统与应用程序的关系
📄 一句话概括

Windows 有几处做法很特别:图形界面起家、用盘符、反斜杠且不区分大小写、注册表、大量共享 DLL——跨平台踩的坑多半就在这些小事上。

📝 本节和前面几节的关系

9.4 讲的是抽象的通用原理,这一节落到一个具体的系统上,也是本章的收口。

一、从图形界面起家

Windows 从第一天就以鼠标操作作为主要方式,这是它跟早期系统最大的分别。 这带来一连串后果:程序形态以窗口为中心、事件驱动成为主流写法、界面本身就是系统的一部分。 到现在,从命令行起家的系统反而在往前追图形界面——两条路最后走得很近。 但它留下的习惯还在:写 Windows 程序,往往先想到【窗口】而不是【输入输出】。

二、盘符、路径、大小写

盘符:用 C: D: 这样的字母代表磁盘。别的系统习惯用一个统一的树,所有磁盘挂在某个目录下。 分隔符:Windows 用反斜杠。写路径时处处要小心,因为反斜杠在字符串里还是转义符。 大小写:Windows 的文件名不区分大小写。 实测:_U27.PY 能找到 _u27.py——在区分大小写的系统上,这是两个不同的文件。 所以【在 Windows 上写好的代码,搬到别的系统跑不了】往往就栽在这些小事上。

三、注册表与共享 DLL

注册表:把系统和软件的配置集中存进一个数据库,而不是分散成一个个配置文件。 好处是查配置快、统一;坏处是它一坏,很多软件一起坏,而且卸载常常卸不干净。 共享 DLL:大量公共库以共享 DLL 的形式存在,省磁盘也省内存(8.6 算过那笔账)。 代价就是那三类麻烦:缺文件、版本冲突、连带故障——系统里那些缺失文件的提示,说的就是它。

四、这一课到这里的落点

回头看这三章(第七、八、九章),讲的其实是同一件事的不同侧面: 第七章:程序跑在【操作系统+硬件】之上。 第八章:程序自己是怎么被造出来的。 第九章:中间那一层操作系统,究竟替你做了什么、又带来了哪些差异。 而【差异】这个词会一直跟到最后一章:同一个逻辑,走到不同的机器上,总有些地方要重新照看一遍。

五、动手 Demo:Windows操作系统的特点

Windows 有几处做法很特别,跟别的系统都不一样。 实测几个只有它才有的现象。

import os
print("盘符列表  ", os.listdrives() if hasattr(os, "listdrives") else "-")
print("分隔符    ", repr(os.sep))
print("行尾换行  ", repr(os.linesep))
print("_U27.PY 能找到吗", os.path.exists("_U27.PY"))

实跑输出:

--------------------------------------------------------------------
Windows操作系统的特点
--------------------------------------------------------------------

Windows 有几处做法很特别,跟别的系统都不一样。

  特点             说明
  ---------------------------------------------------------------------
  图形界面起家     从第一天就以鼠标操作作为主要方式
  盘符             用 C: D: 这样的字母代表磁盘,别的系统是一个统一的树
  路径分隔符       反斜杠 \,而且不区分大小写
  注册表           把系统与软件的配置集中存进一个数据库
  DLL 共享         大量公共库以共享 DLL 的形式存在

  实测几个只有 Windows 才有的现象:

    盘符列表        ['C:\\', 'D:\\', 'G:\\', 'H:\\', 'I:\\']
    路径分隔符      '\\'(不是正斜杠)
    大小写          _U27.PY 能找到吗? True
    行尾换行        '\r\n'(两个字符)

  **最后一条特别值得注意:同一个文件,写 _u27.py 和 _U27.PY 都能找到。**
  在区分大小写的系统上,**这就是两个不同的文件名。**
  所以【在 Windows 上写好的代码,搬到别的系统跑不了】**往往就栽在这些小事上。**

实测:盘符是 C: D: G: H: I: 这几个字母,分隔符是反斜杠,行尾是两个字符。 同一个文件写 _u27.py 和 _U27.PY 都能找到——这就是【不区分大小写】。

30 秒实验

  1. 在 Windows 上把一个文件改成全大写名字,看看别的程序还能不能打开它。
  2. 想一想:为什么很多开源软件的说明里会专门提醒 Windows 用户注意大小写。

常见误区

  1. 以为路径分隔符用哪个都行。反斜杠在字符串里还是转义符,很容易踩坑。
  2. 以为大小写无所谓。别的系统上它直接决定【是不是同一个文件】。
自测三问(点开对答案) 1. Windows 在盘符和路径上有什么特点? —— 用 C: D: 这样的盘符代表磁盘,路径分隔符是反斜杠,且文件名不区分大小写。 2. 注册表的好处和坏处分别是什么? —— 好处是配置集中、查询统一;坏处是一坏就连带很多软件,卸载常常卸不干净。 3. 为什么跨平台程序容易在 Windows 上出问题? —— 盘符、分隔符、大小写这些约定与其他系统不同,代码里的小习惯会失效。

相关笔记