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 秒实验
- 在 Windows 上把一个文件改成全大写名字,看看别的程序还能不能打开它。
- 想一想:为什么很多开源软件的说明里会专门提醒 Windows 用户注意大小写。
常见误区
- 以为路径分隔符用哪个都行。反斜杠在字符串里还是转义符,很容易踩坑。
- 以为大小写无所谓。别的系统上它直接决定【是不是同一个文件】。
自测三问(点开对答案)
1. Windows 在盘符和路径上有什么特点? —— 用 C: D: 这样的盘符代表磁盘,路径分隔符是反斜杠,且文件名不区分大小写。 2. 注册表的好处和坏处分别是什么? —— 好处是配置集中、查询统一;坏处是一坏就连带很多软件,卸载常常卸不干净。 3. 为什么跨平台程序容易在 Windows 上出问题? —— 盘符、分隔符、大小写这些约定与其他系统不同,代码里的小习惯会失效。- ☐ 下一章(第十章 通过汇编语言认识程序的真面目)
相关笔记
- 操作系统和高级编程语言对硬件进行了抽象化 — 抽象层带来的好处与盲区
- 从历史发展看操作系统的功能 — 这些特点是怎么形成的
- DLL文件与导入库 — 共享 DLL 的账算得最清楚
- 🔵 计算机基础 · 索引 — 硬件底层的入门课
- ⚙️ 程序是怎样跑起来的 · 索引