地穴虫


今天是2018年,错误消息向我们发送了1974年的问候。此限制(在最新版本的Windows 10中存在)可以追溯到没有拍摄《星球大战》的那一的时候 。 此错误与Watergate一样古老。 编写时,没有一个产品具有UPC条形码,因为它是刚发明的。 在那些日子里,只有一家电话公司 ,没有分开。 泰德·邦迪Ted Bundy )有空。 贝巴·鲁塔(Beiba Ruta)的本垒打纪录只是准备下降命运之轮尚未显示,也没有人看过《 落基恐怖片》史蒂文·斯皮尔伯格当时还是个鲜为人知的导演, “星期六夜现场”没有出现在屏幕上。 携带铁矿石的“埃德蒙·菲茨杰拉德” 。 那是《教父 》第二部分首映的一年!

那时,只有5年历史的 Unix有了一个很酷的主意,即“一切都是文件”。 这意味着您可以使用相同的命令和指令执行不同的操作,例如写入套接字,管道,控制台等。 该概念由Gary Kildall在1974年转移到CP / M。 您可以将数据从串行端口复制到文本文件,也可以直接从命令行打印文本文件! 在Unix上,这是通过使用位于特殊目录中的特殊文件来完成的,例如对于控制台是/ dev / tty,对于第一台打印机是/ dev / lp0。 您可以从/ dev / zero获得无限的零,从/ dev / random获得随机字节,等等。

但是有一个问题:CP / M是为8位计算机而设计的,该计算机具有非常少量的内存并且没有硬盘驱动器。 最好的情况是,它们有8个“软盘。还有目录吗?您不需要它们。只是使用了不同的磁盘,而不是目录。但是没有目录,您无法将所有特殊文件放入/ dev /。因此,实际上,它们是“无处不在”。也就是说,如果您拥有FOO.TXT并需要进行打印,则可以执行PIP LST:= FOO.TXT来将FOO.TXT复制到LST文件(即打印机)中,并且它可以在任何地方使用,因为该目录不存在。

那扩展呢? 一切也不容易:程序更喜欢在文件中添加正确的扩展名。 也就是说,如果运行该程序并显示“输入文件名以保存列表”,则可以输入LST进行打印,或输入PTP将其写入磁带(因为您在1974年,还记得吗?)。 但是该程序可能会尝试在文件末尾添加.TXT! 但是LST.TXT不再是打印机,对吗? 不管如何 就是这样 可以识别设备名称,而不考虑扩展名。 也就是说,如果将“ CON”分配给键盘,则CON.TXT和CON.BUG也都将被分配。 嗯 这是一个hack,但是可以。 而且,在任何带有4KB RAM的垃圾中,都不管吗?

嗯,CP / M在70年代末-80年代初开始普及。 她定义了标准界面,成为企业主要的操作系统之一。 这意味着您可以在NorthStar Horizo​​n上编写CP / M代码,然后在Seequa Chameleon上运行它。 大部分情况下,缺乏图形标准使其无法进入游戏市场(尽管有Infocom发行版),但主要针对企业用户。 但是它仍然意义重大,因此IBM希望在80年代初期将其用于其PC项目中。 然后,IBM将推出具有多种操作系统的IBM PC,并期望CP / M成为主要的操作系统之一。 但是x / 86的CP / M并没有在IBM PC推出六个月后问世,它的成本为240美元,而DOS为40美元。

结果,绝大多数用户开始使用Microsoft的PC-DOS,这是Seattle Computer Products开发的新OS的发展。 微软购买了蒂姆·帕特森(Tim Paterson)的项目,并在此项目的基础上创建了PC-DOS,后来又成为MS-DOS。 蒂姆·帕特森(Tim Paterson)的操作系统称为“ QDOS” ,意思是“快速而肮脏的操作系统”。 它基于没有x86版本的CP / M,并试图解决CP / M的某些限制。 在许多方面,这些都是非常相似的系统。 通用功能之一是使用特殊文件和缺少目录的想法。 因此,QDOS和PC-DOS 1.0具有所有这些AUX,PRN,CON,LPT等。

随着1983年PC-DOS 2.0的发布,Microsoft对新的IBM XT进行了重大的重新设计。 显然,您只需要保留目录才能订购10兆的巨大磁盘,然后这些磁盘就会出现在市场上。 再一次,不幸的是:自从上一版PC DOS 1.0发行以来,用户一直在使用其特殊文件。 编写了程序和脚本来使用这些文件。 在目录的支持下,Microsoft最终可以删除C:\ DEV中的所有内容,但是没有删除。 微软将不只一次地向后兼容引入了常识:特殊文件以任何扩展名保留在每个目录中。 Windows 95之前的所有版本都保留了这一遗产。但是,现在,我们不使用Windows 95,因为现代的OS分支基于Windows NT。 但是她还需要与DOS / Windows程序兼容。 因此,经过四十四年的操练,这些特殊文件仍然有效! 自己尝试:打开资源管理器,创建一个新的文本文件并将其命名为con.txt。 aux.txt或prn.txt。 在那里。



也就是说,多亏了Gary Kildall,他说:“特殊文件代表了设备! 好主意,Unix。 我借用它并尝试在我的玩具OS中实现它,“很早以前,那时出生的人可能已经有孩子可以喝酒了……我们仍然无法将文件命名为con.txt。 微软甚至有一个特殊的列表 :CON,PRN,AUX,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9,LPT1,LPT2,LPT3,LPT4,LPT5,LPT6,LPT7,LPT8和LPT9。 为使事情变得有趣,请记住,尝试访问C:\ con \ con(或C:\ aux \ aux)会立即将Windows 95放入BSOD。 1995年真是有趣,因为那时这个bug已经21岁了!



背景知识
当我意识到我有一个无法复制的文件时,我遇到了这个问题。 这些特殊文件名是在操作系统级别而不是文件系统级别实现的。 因此,它们是NTFS中的有效文件名。 我在Linux中使用了NTFS磁盘。 显然,OS / 2不支持此特殊名称系统,因此opengl文件中的其中一个是Devcon驱动器上的AUX.H。



今天,我试图在主计算机上备份此NTFS磁盘,“糟糕,由于该错误,我无法复制所有文件,比大多数阅读此文件的人还旧。”

说明
在CP / M中,使用特殊名称实际上并不像我所描述的那样简单。 例如,要访问设备,您需要在名称中输入冒号:PRN:是打印机,而PRN不是。 另外,在CP / M中,不像DOS中那样在OS级别上实现处理设备文件的操作。 这只是复制文件的PIP命令的一部分。 也就是说,您将无法像在DOS中一样启动技巧,指示程序保存PRN.TXT以便进行打印。

为了以防万一,我将澄清:我不是说“ Windows很烂”之类的意思。 向后兼容通常是一件好事。 实际上,我希望更多地向后兼容。 我只是疯了,尝试将一个USB 3.0 SSD驱动器复制到另一个SSD时,在运行Windows 10时遇到了44年的错误。 这就像生活在空间站上并被马践踏一样。

Source: https://habr.com/ru/post/zh-CN428706/


All Articles