技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 发现 --> 为什么 Windows 的文件系统会有盘符,使用反斜杠分割路径

为什么 Windows 的文件系统会有盘符,使用反斜杠分割路径

浏览:1397次  出处信息

   今天同事在公司群里调侃问 Windows 能管理多少个盘。当超过 24 个盘的时候,盘符似乎是以 24 进制的方式增加的,也就是 Z: 后面是 CC: 到 CZ: 然后是 DC: 到 DZ: 。当有 600 个盘以后,或许应该用 CCC: 了吧?

   这也提醒我们,用正则表达式匹配 Windows 下的文件路径时,不可默认盘符只有一个字符。

   为什么 Windows 会有盘符这个诡异的东西呢?

   按如非必要、勿增实体的原则,只用路径就够了呀。物理分区完全可以隐藏在文件系统之后,在 Unix 系的操作系统中,分区是用挂接点的方式挂接在虚拟文件系统中的。如果是为了方便记忆和保持用户习惯,完全可以把分区顺着挂接到 /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 。

建议继续学习:

  1. 海量小文件存储    (阅读:7368)
  2. 其实,文件也可以truncate    (阅读:7243)
  3. htaccess二级目录重写找不到路径    (阅读:5358)
  4. 关于Linux的文件系统cache    (阅读:4620)
  5. Bash如何取得当前正在执行的脚本的绝对路径?    (阅读:4568)
  6. Perl 倒行分析文件方法。perl读文本文件,从末尾往前读.    (阅读:4298)
  7. 修改系统最大文件句柄数    (阅读:4113)
  8. PHP:从一个大文件第N行开始读取M行    (阅读:3792)
  9. C/C++循环获取文件中的每行数据(别以为很简单!)    (阅读:3736)
  10. linux file命令是如何识别文件的类型的    (阅读:3718)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1