九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
微軟“黑歷史”:一個活了 45 年的愚蠢 Bug!

【CSDN編者按】微軟于近期推出了Windows 10操作系統(tǒng)。不斷壓縮的更新周期下,一般而言,系統(tǒng)Bug的存活希望會被很快掐滅,快速迭代。但是本文的作者在Windows 10上從一個USB 3.0 SSD向另一個SSD拷貝文件時卻遭遇了一個44年前的bug,他把這個“愚蠢”的Bug分享到了博客上,并且引起了開發(fā)者們的回憶熱潮。

以下為譯文:

現(xiàn)在都2018年了,而這個來自于1974年的錯誤信息居然還在。最新版本的Windows 10依然有這個限制,而這個bug第一次出現(xiàn)的時候星球大戰(zhàn)還沒上映,都跟水門事件一樣老了。

這個bug出現(xiàn)時,超市里的東西還沒有UPC條碼,因為UPC還沒發(fā)明。

這個bug出現(xiàn)時,世界上只有一家電話公司,因為他們還沒分家。Ted Bundy還沒被抓。Babe Ruth的本壘打紀錄還沒有被打破。

這個bug出現(xiàn)時,幸運大轉(zhuǎn)輪還沒播出,也沒人看過Rocky Horror。斯皮爾伯格只是一系列小眾電視劇的導(dǎo)演,電影票房也十分糟糕。埃德蒙德·費茲杰羅號貨輪還是一堆鐵礦石。

這個愚蠢的bug出現(xiàn)時,教父2才剛剛在電影院中上映。

1.那么,這個bug究竟是什么?

因為Unix(當(dāng)時才僅僅5歲)發(fā)明了一個很好的點子——“一切皆是文件”,也就是說,你可以用同樣的命令和指令讀寫套接字、管道、控制臺等等。

這個點子是由Gary Kildall在1974年想出來的。用這個方法有很多方便之處,比如可以從串口拷貝數(shù)據(jù)到文本文件,或者直接從命令行打印文本文件。

在Unix中,這個點子是通過特殊目錄下的特殊文件實現(xiàn)的,比如/dev/tty表示控制臺,/dev/lp0表示第一個打印機等。/dev/zero可以提供無限的零,/dev/random可以提供隨機字節(jié),還有很多!

但有個問題:CP/M是為8位計算機設(shè)計的,這些計算機內(nèi)存很小,也沒有硬盤,最多也就有個8寸軟驅(qū)。目錄是什么?還要目錄干啥。你換個軟盤就行了。

但沒有目錄,就沒辦法把所有特殊文件都放在/dev/目錄下了。所以這些文件實際上被放到了“所有地方”。所以,如果你要打印FOO.TXT,可以執(zhí)行“PIP LST:=FOO.TXT”,就能把foo.txt拷貝到“文件”LST,而實際上這個就是打印機。

這個命令在任何地方都可以使用,因為根本沒有目錄!非常簡單。

2.那擴展名怎么辦?

這里就有問題了:程序喜歡給自己的文件加上正確的擴展名。

所以如果你運行一個程序,它問你“請輸入要保存代碼的文件名”時,你可以輸入LST讓它直接打印出來,或者輸入PTP讓它輸出到磁帶(別忘了現(xiàn)在是1974年?。?/p>

但是!程序可能會自己在文件名后面加上.TXT!LST.TXT不是打印機,對吧?

錯了,LST.TXT也是打印機。這些特殊設(shè)備存在于所有擴展名中,這樣上面的問題才不會出現(xiàn)。所以,如果“CON”被用來指代鍵盤,那么CON.TXT、CON.WAT、CON.BUG都是鍵盤。

額……這確實是個hack,但就是好使,而且這只不過是只有4k內(nèi)存的微型計算機,誰在乎呢?

3.IBM、微軟等巨頭的加入

結(jié)果70年代末到80年代初CP/M廣泛流行。

它是最主要的商用操作系統(tǒng)之一。它定義了一套接口,你可以用這套接口在NorthStar Horizon上寫CP/M代碼,然后放到Seequa Chameleon上運行(注:兩者都是計算機的型號)。

由于它缺少圖形標(biāo)準,所以無法進入游戲市場(雖然有一些Infocom的東西),所以主要是用于商用。但它實在太流行了,于是IBM很自然地希望在80年代早期的“個人電腦”項目上使用它。

于是IBM計劃在IBM個人電腦發(fā)布時支持幾種操作系統(tǒng),其中CP/M是最主要的那個。但CPM的x86版直到IBM個人電腦發(fā)布六個月之后才出現(xiàn)……而且價格是感人的$240,相比之下DOS只要$40。

所以絕大部分用戶選擇了微軟的PC-DOS,這個產(chǎn)品曾經(jīng)是由Seattle Computer Products開發(fā)的一個劃時代的新操作系統(tǒng)。微軟買下了Tim Paterson的這個項目,并在其基礎(chǔ)上開發(fā)了PC-DOS(后來改名為MS-DOS)。

Tim Paterson的操作系統(tǒng)叫做“QDOS”,意思是“Quick and Dirty Operation System”——“快速、骯臟的操作系統(tǒng)”。原因基本上是因為CP/M還沒有x86版,QDOS就是為了解決CP/M的一些問題而出現(xiàn)的。所以,很多方面都借鑒了CP/M。

其中主要的一點就是借鑒了不使用目錄來操作特殊文件的點子,因為在CP/M中這個功能很有用。于是QDOS和PC-DOS 1.0中也有AUX、PRN、CON、LPT等等!

4.結(jié)果問題來了

1983年隨著IBM XT一起發(fā)行的PC-DOS 2.0中的大部分被微軟重寫了。因為IBM XT帶硬盤,所以PC-DOS需要支持目錄。顯然,一個10MB的硬盤需要目錄來組織文件!

但問題來了:用戶在兩年前PC DOS 1.0時就開始使用這些特殊文件名了。許多軟件都用了這些特殊文件名!各種批處理文件也需要它們。所以,盡管有了目錄之后微軟可以建一個C:DEV目錄,但他們沒有這樣做。

這種犧牲可用性來滿足向后兼容性的事情絕不是最后一次。特殊文件依然適用于所有目錄,所有擴展名。所以“DIR > LPT”來打印目錄的技巧不會由于你從A:切換到了C:DOS就不能用了。

但是,我們現(xiàn)在早就不用DOS 2.0了……Windows 95是基于DOS的,所以很自然地繼承了這一行為。(當(dāng)然Windows 1/2/3也繼承了,但與它們相比,Win95才是真正意義上的操作系統(tǒng)。)

但是,我們現(xiàn)在早就不用Windows 95了!現(xiàn)在的Windows是基于Windows NT的,不是Win95。

但Windows NT想要與DOS/Windows程序兼容。而XP合并了兩條產(chǎn)品線,所以這些特殊文件依然存在——這時距離這個bug出現(xiàn)已經(jīng)過去44年了!

你可以自己試試看!打開文件管理器,新建一個文本文件,命名為con.txt、aux.txt、prn.txt。

但Windows不會讓你這么干的:

這都是因為Gary Kiddal說“特殊文件表示硬件設(shè)備!Unix的這個點子很不錯。我要把這個點子實現(xiàn)在我的玩具操作系統(tǒng)中”……那一年出生的人的孩子都長大成人了,但我們?nèi)匀徊荒芙╟on.txt……

微軟給出的官方列表是:

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9

https://docs.microsoft.com/en-us/windows/desktop/fileio/naming-a-file

更有意思的是,在Win95上訪問C:concon(或C:auxaux)會直接導(dǎo)致藍屏。即使在1995年這也非常荒謬,因為這個bug已經(jīng)21歲了!你能想象一個錯誤的設(shè)計會如此長壽么?

福利:下面這張圖是Tim Paterson在今年8月的VCF:W上介紹DOS的歷史。

至于為什么我發(fā)現(xiàn)了這個無法拷貝文件的bug……這些特殊文件名是在操作系統(tǒng)級別實現(xiàn)的,而不是文件系統(tǒng)級別。所以這些文件名完全是合法的NTFS文件名,而我在Linux下使用這些NTFS文件系統(tǒng)。

而且顯然OS/2也沒有實現(xiàn)這些特殊文件名,因為IBM在OS/2 devcon磁盤上發(fā)布的一些opengl頭文件中有個文件叫AUX.H。

所以我今天想把這個NTFS盤備份到主PC上然后驚喜地發(fā)現(xiàn),我沒辦法拷貝所有文件,而造成這個問題的bug的年齡比所有讀者都大……

5.內(nèi)容糾錯

抱歉我這幾天要么在醫(yī)院里,要么在睡覺,好不容易才有機會上來更新一下:

1.CP/M對于特殊文件的處理方式其實不像我說的那么簡單,所以我一直也沒學(xué)會,也有可能學(xué)會了然后忘了。其實特殊文件后面要有個冒號,就跟盤符一樣。比如PRN:是打印機,而PRN不是。

2.CP/M并不像DOS那樣在操作系統(tǒng)層次實現(xiàn)!CP/M中是在PIP(文件復(fù)制)命令中實現(xiàn)的。所以沒辦法像DOS那樣讓程序直接保存到PRN.TXT進行打印。我可能沒說清楚,我想說的是DOS,沒有暗示CP/M也能這樣做。

3.PC DOS 1其實沒有重定向或管道,所以沒辦法像我說的那樣做重定向。我忘記了。這些功能是1983年在PC DOS 2.0中加入的。但PC DOS 1的確支持從特殊文件中拷貝或拷貝到特殊文件,所以我說的大方向是對的,雖然例子搞錯了。

不論如何,感謝大家的回復(fù)!我沒想到這篇文章能這么火,其實它只是我在遇到一個44年的bug之后感到很無力而已。

而且我想重申,這篇文章并不是想說“Windows很垃圾”。一般來說,向后兼容是很好的。實際上我希望看到更多向后兼容。

我只是覺得,在Windows 10上從一個USB 3.0 SSD向另一個SSD拷貝文件時,遇到個44年前的bug很奇妙。

就像你在宇宙空間站中被馬踢了一樣。

6.開發(fā)者的看法

Hacker News上的很多開發(fā)者對于這個45歲的bug發(fā)表了自己的看法。

評論1:

好懷念那時的互聯(lián)網(wǎng)……當(dāng)時我們經(jīng)常搜索21端口,就能找到很多開放了匿名FTP權(quán)限的機器,其中很多機器都是Windows的。

我們在這些匿名FTP上經(jīng)常使用的“技巧”是:用這些特殊文件名創(chuàng)建一些嵌套的目錄。在FTP服務(wù)器上,你可以創(chuàng)建這些目錄,也可以訪問它們(只要你知道正確的路徑),但Windows下這些目錄會導(dǎo)致錯誤,或者訪問時會造成系統(tǒng)崩潰。再加上你可以創(chuàng)建文件名中只有空格的目錄,所以可以在匿名FTP上放很多東西而不被管理員發(fā)現(xiàn)。

評論2:

我們高中的實驗室中用的是Windows For Workgroups 3.11,我們用Alt+255(這個字符在DOS下像個空格,但在Windows下是隱藏的)來隱藏Doom、Descent還有很多其他DOS游戲的安裝文件。

實驗室管理員禁用了Ctrl+C和Ctrl+Break來防止有人退出DOS下的登錄提示符直接進入C:,但我不知怎么發(fā)現(xiàn)了Alt+3也能輸入同樣的字符,起到同樣的作用。

只有一次有個老師對我喊“在實驗室里待了太長時間”,但我從來沒被抓到過。我覺得管理員(上了點年紀的編程和數(shù)學(xué)老師)應(yīng)該知道我們在干什么。

評論3:

好玩的是那些“COM”、“LTP”等后面加數(shù)字的……或者至少加上個像是數(shù)字的Unicode,所以COM2跟COM2一樣不能用。

這種設(shè)備映射是在Win32層進行的,而不是NT內(nèi)核上,所以你可以使用“verbatim path syntax”來越過這些規(guī)則。例如,“C:TempCOM2.TXT”是特殊設(shè)備,而“?C:TEmpCOM2.TXT”就是個普通文件,完全可以正常讀寫……但像文件管理器這種沒使用verbatim path syntax的程序就會報錯。

原文:https://threadreaderapp.com/thread/1058676834940776450.html

作者:foone

譯者:彎月,責(zé)編:郭芮

征稿啦

CSDN 公眾號秉持著「與千萬技術(shù)人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時間以技術(shù)人的獨特視角描述技術(shù)人關(guān)心的行業(yè)焦點事件,更有「技術(shù)頭條」專欄,深度解讀行業(yè)內(nèi)的熱門技術(shù)與場景應(yīng)用,讓所有的開發(fā)者緊跟技術(shù)潮流,保持警醒的技術(shù)嗅覺,對行業(yè)趨勢、技術(shù)有更為全面的認知。

如果你有優(yōu)質(zhì)的文章,或是行業(yè)熱點事件、技術(shù)趨勢的真知灼見,或是深度的應(yīng)用實踐、場景方案等的新見解,歡迎聯(lián)系 CSDN 投稿,聯(lián)系方式:微信(guorui_1118,請備注投稿+姓名+公司職位),郵箱(guorui@csdn.net)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Windows 7 下文件名過長導(dǎo)致無法刪除的解決辦法 | Pop's Blog
DOS命令 DOS批處理 ECHO 系統(tǒng)變量
dos處學(xué)
DOS命令全集
Win + DOS
圖解電腦硬盤維修及數(shù)據(jù)恢復(fù)11
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服