您当前的位置:首页 > 计算机 > 编程开发 > C语言

怎样防止用户用Ctrl+Break键中止程序的运行?

时间:01-03来源:作者:点击数:

在缺省情况下,MS—DOS允许用户按Ctrl+Break键来中止程序的运行。在大多数情况下,这是一种很有用的功能,它使用户能从程序不允许退出的地方退出程序,或者从一个运行已经失常的程序中退出。

但是,在某些情况下,这种操作是非常危险的。有些程序一旦被中止,可能就会采取“保护”措施,从而使用户能侵入保密数据区。此外,如果程序在更新磁盘上的数据文件时被中止,很可能就会毁坏数据文件,从而毁掉一些有用的数据。

基于这些原因。在某些程序中,解除Break键的功能是很有必要的。警告:在不能百分之百地肯定这样的代码能起作用之前,不要轻易把它加到你的程序中去!否则,一旦这段代码有误并且程序在运行时阻塞住,你就不得不重新启动计算机,而这很可能会毁掉最近对程序所作的修改。

下面介绍如何使Break键失效。这是一种特殊的操作,在有些计算机上无法实现,而有些计算机上根本就没有Break键。因此,c语言中没有一条特殊命令用来解除Break键的功能,而且,即使在以MS:DOS为操作系统的计算机上,也没有一种标准的方法来实现这一点。在大多数计算机上,你必须用一条特殊的机器语言命令来实现这一点。下面是一个在MS-DOS中解除Break键功能的函数:

    #include<dos.h>
    void StopBreak()
    {
       union REGS in,out;
       in.x.ax=0x3301:
       in.x.dx=O:
       int86(0x21,&in,&out);
    }

这个函数要设置一组寄存器,即把3301H赋给ax寄存器,把O赋给dx寄存器。然后,它将通过这些寄存器调用中断21H,从而调用DOS,并通知它不再希望让Break键中止程序的运行。

下面是一个用来测试该函数的程序:

  #include<stdio.h>
  #include<dos.h>
  void StopBreak()
  {
    union REGS in,out:
    in.x.ax=Ox3301:
    in.x.dx=O:
    int86(Ox21,&in,&out):
  }
  int main()
  {
    int a:
    long b:
    StopBreak();
    for(a=O;a<100;++a)
    {
       StopBreak();
       printf("Line %d.\n",a);
       for(b=O;b<500000L;++b);
    }
    return O:
  }

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门