用戶:FK8438/沙盒
背景和起源
在早期的8位元DOS操作系統CP/M中,如果嘗試在磁碟門開啟的情況下讀取軟碟機,系統會讓程序懸置,直到插入磁碟門並且關閉(一些非常早期的磁碟硬件不會發送任何類型的訊號,直到磁碟被插入)。許多CP/M用戶已經習慣了這種管理磁碟的方法,透過開啟磁碟機來阻止程式讀取或寫入文件·,直到插入正確的磁碟為止。
瓷盤操作系統的主要設計考慮因素是為CP/M編寫的軟件是可移植到DOS,期間無需進行任何更改。即使第一代IBM 個人電腦中,也有硬件告訴作業系統磁碟機門已打開,但向軟件傳回錯誤將需要重寫軟件來處理錯誤。儘管如此,在設計之初時為了改善用戶體驗,特別是為那些不想要被阻止的使用者,「終止,重試,還是失敗」將會提供一種擺脫懸置的方法。
同樣,只要出現錯誤,CP/M就會重新讀取或寫入磁碟。通常,解決這個問題的唯一方法是將磁碟更改為另一個磁碟,然後它會從新磁碟上隨機讀取一些內容來解決。該提示也被重新使用以提供一種阻止這種情況的方法。
描述
磁碟遺失(或磁碟門開啟)被DOS定義為「嚴重錯誤」,並且在這個「嚴重錯誤」出現後將會通知一個佳偶走「嚴重錯誤處理程序」的程序。[1]
「嚴重錯誤處理程序」啟動後,會在屏幕上打出「Abort, Retry, ...」提示,然後等待使用者輸入。 當出現其他問題(特別是,校驗和錯誤)時從磁碟讀取資料,也將會被被定義為「嚴重錯誤」,從而導致因「磁碟遺失」或「磁碟門開啟」以外的原因出現提示。
解釋
當出現「終止,重試,還是失敗」警告信息後,使用者可以按一個指定的鍵盤字母來決定他們後續的操作。其中,可用可用選項包括:[2]
- Abort--終止(A):終止操作或程序,並返回命令提示字元。該程式不會進行任何清理(例如完成其他文件的寫入)。
- Retry--重試 (R):再嘗試操作。如果使用者可以透過插入磁碟並關閉磁碟機門來解決問題,則可以執行「重試」操作。在早期的硬件上,重試磁碟讀取錯誤有時會成功,但隨着磁碟機的改進,這種情況變得不太可能。
- Ignore--忽略(I):將成功狀態傳回給呼叫程式或例程,儘管操作失敗。這可用於磁碟讀取錯誤,DOS 將傳回讀取緩衝區中的任何資料(可能包含一些正確的資料)。對於開啟的磁碟機或遺失的磁碟,不會出現「忽略」。
- Fail--失敗(F):從 MS-DOS/PC DOS 3.3以及之後的版本開始,「失敗」將會向程式傳回錯誤代碼,類似於「找不到檔案」錯誤。然後程式可以正常恢復,並也許會要求使用者提供不同的檔案名稱。透過提供不會使程式崩潰或重複提示的選項,消除了提示的最大問題(以前稱為「中止、重試、忽略?」)。
有些程式可以在運行時安裝並使用自己的「嚴重錯誤處理程序」,並且許多更複雜的程序這樣做是為了避免原本的訊息幹擾顯示。有些程式透過跳回呼叫程式、跳過DOS中的返回堆疊來偽造「失敗」回應。
在MS-DOS6.22中包含一種特殊情況,其中唯一的選項是「(R) 重試」:刷新硬碟後寫式快取無法完成。 使用者可以嘗試重新寫入直到成功,或關機。
現代
硬碟和更大的可移動媒體使得管理每個磁碟機的多個磁碟的需求變得過時,從而使提示變得毫無用處。這也導致了它逐漸被立即「失敗」的錯誤代碼所取代。 DOS 3.3 COMMAND.COM 提供了啟動選項 /F
來強制預設的關鍵錯誤處理程序在所有錯誤上傳回「失敗」。從版本 4.0 開始,替代命令列處理器 4DOS 和 NDOS 支援 /F
以及 4DOS 中對應的
/CritFail=Yes
指令.ININDOS.INI
也是如此。PTS-DOS 6.51 和 S/DOS 1.0 的 COMMAND.COM 以及 DR-DOS 7.02 及更高版本也支援此選項。在 OpenDOS 7.01 中,COMMAND.COM 提供了與 /N
類似的功能(描述為「未安裝關鍵錯誤處理程序」),新版本仍然支援該功能。大多數其他作業系統,例如 Linux,在所有情況下總是表現為「失敗」。
隨着DOS和磁碟的使用逐漸被取代,「終止,重試,還是失敗」變得越來越罕見。