2025年3月13日 星期四 甲辰(龙)年 月十二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > C语言

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

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

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

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

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

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

  • #include<dos.h>
  • void StopBreak()
  • {
  • union REGS inout
  • inxax=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
  • inxax=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:
  • }

 

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