C语言函数大全(h开头)
函数名:harderr
函数:构建硬件错误处理程序
用法:void harderr(int(* fptr)());
程序示例:
/*该程序将捕获磁盘错误并提示
用户操作。尝试在驱动器A:中没有
磁盘的情况下运行它,以调用它的功能。*/
# include
# include
# include
# define IGNORE 0
# define RETRY 1
# define ABORT 2
int buf[500];
/*定义用于捕获磁盘问题的错误消息*/
static char * err _ msg[]= {
"写保护"、
"未知单元"、
"驱动器未就绪"、
"未知命令"、
"数据错误(CRC)"、
"错误请求"、
"寻道错误"、
"未知媒体类型"、
"找不到扇区",
error _ win(char * msg)
{
int retval;
cputs(msg);
/*提示用户按某个键以中止、重试、忽略*/
while(1)
{
retval = getch();
if(retval = = ' A ' | | retval = = ' A ')
{
retval = ABORT;
break;
}
if(retval = = ' R ' | | retval = = ' R ')
{
retval = RETRY;
break;
}
if(retval = = ' I ' | | retval = = ' I ')
{
retval = IGNORE;
break;
}
}
return(retval);
}
/*pragma warn -par减少了由于处理程序没有使用参数errval、
bp和si而出现的警告
。*/
# pragma warn-par
int handler(int errval,int ax,int bp,int si)
{
static char msg[80];
未签名的di;
int drive;
int error no;
DI = _ DI;
/*如果这不是磁盘错误,则是
另一个设备有问题*/
if(ax < 0)
{
/*报告错误*/
error_win("设备错误");
/*并返回程序直接请求ABORT */
hard retn(ABORT);
}
/*否则就是磁盘错误*/
drive = ax & 0x 00 ff;
error no = di & 0x 00 ff;
/*报告是哪个错误*/
sprintf(msg," Error: %s on drive %c\r\nA)bort,etry,I)gnore:",
err_msg[errorno],' A '+drive);
/*
通过dos中断0x23返回程序,用户输入中止、重试、
或忽略。
*/
hard resume(error _ win(msg));
return ABORT;
}
# pragma warn+par
int main(void)
{
/*
在硬件问题中断上安装我们的处理程序
*/
harderr(handler);
clrscr();
printf("确保驱动器A中没有磁盘:\ n ");
printf("按任意键....\ n ");
getch();
printf("正在尝试访问驱动器A:\ n ");
printf(" fopen returned % p \ n ",fopen("A:temp.dat "," w "));
返回0;
}
0条评论