DOS软磁盘系统严重错误的屏蔽

本文详细探讨了如何屏蔽DOS环境下遇到的磁盘系统严重错误,包括磁盘检测错误、一般性硬件错误和磁盘软件错误。通过调用BIOS的13H中断、修改中断向量以及处理文件打开失败等方式,程序员可以防止这些错误破坏用户界面。
摘要由CSDN通过智能技术生成

摘要:本文介绍了有关DOS磁盘系统严重错误的知识,并就如何屏蔽DOS磁盘系统严重错误的问题进行了较深入的探讨

关键词:DOS磁盘系统严重错误、中断向量、中断修改、磁盘检测(Disk Verifying

C语言程序设计时,程序员可能会碰到这样的尴尬场面:自己精心设计的用户界面被“Not ready reading drive A”之类的DOS磁盘错误提示所破坏,这是灾难性的。当程序员用fopen函数去操作A盘上的文件时,这种问题就可能会出现。为了讨论的方便,我们姑且将磁盘系统严重错误分为三种:磁盘检测错误(如扇区未找到、磁盘未准备、写保护错误等)、一般性硬件错误(如提示“General fail in drive A”等)和磁盘软件错误(如文件不存在等)。只要解决了这三个问题,那么本文的主要问题就解决了。

1、  磁盘检测错误

BIOS系统提供的13H号中断调用中04H子功能是扇区检测功能(Verify disk sector),调用这个磁盘检测功能可以取得一些磁盘的状态,如磁盘是否准备就绪等。本功能的返回参数如下:如果成功,进位标志清零,AH=0AL=检测的扇区数;如果失败,进位标志置位,AH=错误代码。在磁盘系统中,换盘也被认为是一个错误,但对于用户来说,换盘操作是允许的,所以,这个功能应至少被调用三次,再判断返回参数,以确保正确性。

磁盘扇区检测功能虽然能够检测磁盘的一些硬件错误诸如“扇区未找到”、“磁盘未准备”等,但还有些错误却被忽视,比如磁盘的写保护错误。为此,我们只能够通过磁盘的物理扇区写操作来判断磁盘或驱动器的状态,方法是:先读出一个扇区(读三次)再用13H03H功能将扇区写回(写三次),最后判断03H功能的返回参数(返回参数格式与04H相同)。如下的程序实现了这个功能,如果成果,返回0,如果失败,返回错误代码。

void  IoSector  (unsigned drive,unsigned action,

                             int head,int sector,int cylinder,

                             unsigned char *buffer)

{

       regs.h.ah=action; regs.h.al=1;

       regs.h.ch=cylinder; regs.h.cl=sector;

       regs.h.dh=head; regs.h.dl=drive;

       regs.x.bx=FP_OFF(buffer); sregs.es=FP_SEG(buffer);

       int86x(0x13,&regs,&regs,&sregs);

}

 

int  CheckSector (unsigned drive, unsigned head, unsigned sector, unsigned

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值