我发了一个文字处理器,它每1024次保存一次就格式化一次硬盘

2020-05-03 02:50:08

新对话必须有';84或';85。我是一个聪明的25岁的人,在这项运动中大约有5年的时间。我是编写和维护一套类似Office的应用程序的两名程序员之一:电子表格、wp、数据库、绘图仪等。我们为三四个垂直市场定制了一切。

所以我写了大部分的可湿性粉剂。这是在Forth中,基于各种OS/CPU组合。年轻的孩子们不一定知道这一点,但在那些商店里,会有一台新的微型计算机,装有定制的操作系统,每*个月*左右就会有几个CPU中的一个。

Fourth使用基于块的磁盘I/O。每个块的长度为1KB,为了保存任何大于1KB的数据,您最终得到一个文件主块,它将包含对具有数据的块的偏移量,基本上是一对列表、已分配和无。

为了初始化文件主文件,我会用零填充它。然后我们就可以开始了!长话短说,我改变了应用程序,让我们拥有的文件长度是以前的两倍,文件主文件中的256个条目变成了1024个。

每个条目都是--我们现在开始--一个*字*,你看,16位。因此,虽然将大小增加到512仍然适合我的1k主块,但是将其增加到1024将需要其中的两个块。

因此,我更改了这些零的*Fill*数字,而没有更改*Buffer*大小。在不受保护的内存情况下,当您在1024字节上填充2048个零时,额外的字节会覆盖超出该缓冲区大小的内存中的任何随机垃圾。

在我的例子中,随便什么乱七八糟的东西都是o/s的*master**磁盘**块*。是。当我去初始化新文件时,每1024次保存一个1数据块文件就会发生一次,我覆盖了驱动器的主块,消除了它的所有文件。

所以,是的,果然如此。我们把那个版本的代码发货了,我不知道,8或9周。你可以想象一下我在处理客户的电话。我们最终告诉每个人要始终备份(到VCR磁带,顺便说一下)*每**一天**。

我花了整整几个星期的时间,除了通过电话道歉和在调试器中一遍又一遍地运行我的应用程序之外,什么也没做。没什么。我一无所获。

不过,有一位女士打来电话,她说是她让她--这是一家卡车运输公司,这位女士对脏话的使用将使我在今后的所有日子里充当个人模特--做了后备,启动了可湿性粉碎机,“立即”擦除了她的硬盘。

她重新加载了备份,并再次“立即”擦除了她的驱动器。她非常生气。你知道吗,我花了将近两个小时才意识到我得了什么病?我在午餐时给我的上司讲了这个故事,然后我就想,等等。等。*立即*?*每**次*。

我给她打了电话,并向她承诺一切,*一切*,如果她能把那盘带子打包并用联邦快递寄给我的话。我告诉她,我们会支付运费,并免除他们每月的费用。(我的老板从来没有犹豫过,他说,哦,见鬼,是的,我们会免除费用的。)。

我终于让人复制了这个错误。她没有撒谎。已备份的第四个映像具有临界点:备份完成时保存了1023个。加载备份,保存,擦除,保证。

我可能夸大其词了,但我很确定我在磁带送到的同一天早上就发现了问题。在调试器中可以看到这一点就这么简单。

我看着即将被填满的2k块,最后1k是,我不知道,*垃圾*。这看起来很奇怪,所以我调查了一下。当然,它不是垃圾,而是驱动器主磁盘块的1024字节,操作系统将其隐藏在我的文件主块旁边。

我所拥有的是核心转储之前的";。我没有核心转储,但我有一条通往缺陷的保证路线。如果我没有走运,我就再也找不到它了。我从来没有想过我是在写系统内存,而不是我自己的内存。

所以,是的。你的极客大师送来了一台文字处理机,在8到9周内,每省一次钱,就会格式化客户的硬盘。因为。你知道。我有“技能”。

这个故事很可能有很多寓意,但我要对任何低年级学生强调的两点是:1)除了0、1和-1.2)不要对自己太苛刻。*你们所有的老前辈都有这样的故事,我们中的一些人也有*几个这样的故事。:)。

喜欢我的内容吗?凉爽的。我的大部分Twitter帖子都变成了博客和播客,你可以确保你永远不会错过一个。它是免费的,不含垃圾邮件,而且还支持我。现在就订阅!

对话结束