为什么 Windows 的文件系统会有盘符,使用反斜杠分割路径
今天同事在公司群里贴了张屏幕截图,上面有30+ 个盘。从 C: 排到 Z: , 然后还有 CC: CD: ,调侃问 Windows 能管理多少个盘。
图应该是 P 出来搞笑的,除去 A B 盘保留给已经淘汰的软驱用外,windows 超过 Z 盘后就不在能增加了。如果有更多储存设备,则需要用把设备挂接在空目录上(ntfs 支持)。
为什么 Windows 会有盘符这个诡异的东西呢?
按如非必要、勿增实体的原则,只用路径就够了呀。物理分区完全可以隐藏在文件系统之后,在 Unix 系的操作系统中,分区是用挂接点的方式挂接在虚拟文件系统中的(ntfs 其实也支持)。如果是为了方便记忆和保持用户习惯,完全可以把分区顺着挂接到 /c /d /e /f 下。如果你在 windows 下安装 mingw/msys 它就是这样处理 C 盘、D 盘 …… 的。
答案要从历史中找。
Windows 的前身是 微软的 Dos 系统。我见过的最古老的 MS Dos 是在我同学家的一台旧 IBM PC/XT 上。10M 的硬盘、只有 256K 内存,配置的系统是 PC(MS) Dos 2.0 。
知道这个 2.0 版的 Dos 比它的前身最大的改进是什么吗?它比 MS DOS 1.0 多支持了硬盘,以及层级目录结构。
同时期的主流电脑是 Apple ][ ,它的原生操作系统(Apple Dos)是不支持硬盘的,软盘上只有一个根目录。MS Dos 1.0 也一样。
除了 IBM PC,Apple ][ ,那个年代个人电脑品牌其实非常多。比如我的第一台电脑就是港产的 Z80 机器(laser 310 )。当时 8 位机上最流行的个人操作系统是一个叫做 CP/M 的系统。不过当时流行直接用汇编写程序,这个 CP/M 必须跑在 Z80(8080) 的指令集上。当年 Apple ][ 上流行过一种叫做 Z80 卡的扩展件,就是为了可以跑 CP/M 系统。
微软起家为 IBM 的 8086 系列 PC 写操作系统时,就借鉴了 CP/M 的一些东西,其中就有盘符这个东西。在没有硬盘,及内存小于软盘容量的年代,配置两个软盘驱动器是最方便的,所以就有了 A B 两个盘符(方便数据对拷)。每个文件都可以写成 A:FILENAME.EXT 的形式。这就是盘符的由来。
btw, 早年 IBM 想和 CP/M 合作没谈成,后来 PC 流行后,CP/M 又反回来兼容了 MS-DOS 跑在 PC 系统上,改名字叫 DR-DOS ,应该很多同学有印象。
MS DOS 发展到 2.0 时,由于 IBM 给 PC/XT 增加了 10M 的硬盘,所以盘符就被扩展到了 C: 表示硬盘。储存空间的增加导致了必须增加文件目录结构。可为啥微软选择了反斜杠,而不是 Unix 系列中已经很广泛的 / 呢?
这是因为,MS Dos 已有的很多命令行工具。当时微软做开发的人有 DEC 的背景,DEC 的操作系统上是用 / 做命令行参数分割符,而不是 Unix 系列用的 - ,就这样沿用到了 MS Dos 里。btw, 我读大学时第一次接触 Linux ,感觉输入最不习惯的就是用 - 而不是 / 。
为了防止混淆,目录风格符就不能再使用 / 了,DEC 系统中用的是点 "." ,可 MS Dos 学了 CP/M 用 . 做文件后缀名分割,所以就用了让后代程序员深恶痛绝的反斜杠 \ 。
ps. C 系列的语言中,\ 是字符串转义符,写在字符串里你需要写 \\
,特别麻烦。
今天发现本 Blog 用的虚拟主机 linode 降价了,现在只要 5$ 一个月。去后台调一下即可。Linode 用 7年了,感觉非常好。
如果有同学也有兴趣租一个境外的 vps ,可以点这个链接 ,或者填我的 referral code : 538bab39bc1265a2ce54115d1f86e2bc81e4d133 。
Comments
Posted by: Anonymous | (7) November 27, 2017 02:34 PM
Posted by: kk | (6) March 18, 2017 08:45 AM
Posted by: spin6lock | (5) February 24, 2017 05:56 PM
Posted by: dwing | (4) February 18, 2017 11:17 AM
Posted by: cloud | (3) February 18, 2017 01:02 AM
Posted by: anonymous | (2) February 17, 2017 07:41 PM
Posted by: kevin | (1) February 17, 2017 05:37 PM