在TSR驻留内存程序中如何读写文件!

wangwpf 2005-09-06 09:30:47
我想写一个在DOS下的监控程序,每隔一定的时间将一个信息要写到文件里,可以我一读写硬盘就死机,我在网上看到说在TSR程序中不能用fopen,fclose这一套操作标准文件的函数,可我换用open,close这类操作非标准文件的的函数也不行,不知道还有没有什么方法可以解决这个问题!
...全文
135 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
每次需要进行文件操作时,
=======================
每次你的TSR激活时好了。
因为你的TSR是C写的,某些用到的库函数可能隐含调用了DOS。
否则可以只在需要重入DOS的时候才保存/恢复SDA。
  • 打赏
  • 举报
回复
这是因为DOS调用重入了。
TSR必须保存/恢复SDA才行。

INT 21H AH=34H get INDOS flag address
return:
ES:BX INDOS标志地址。

INT 21H AX=5D06H get SDA address
return:
DS:SI SDA地址,第一个字节是DOS关键性错误处理标志,这个字节不为0的时候是绝对不能重入的;
CX 当INDOS标志设置时需要交换的数据区大小;
DX 正常情况下需要交换的数据区大小。

程序开始时,
先取得INDOS地址,保存为一个指针;
再取得SDA地址,保存为一个指针,并保存两种情况下需要交换的数据区大小(比如size1和size2)。
每次需要进行文件操作时,
先检查SDA的第一个字节-DOS关键性错误处理标志,如果不为0,应该立即返回。
如果为0,
如果INDOS > 0,保存SDA长度为size1的数据;
如果INDOS = 0,保存SDA长度为size2的数据;
不判断,总是保存/恢复size1也可以。
文件操作;
恢复SDA。
mituzhishi 2005-09-06
  • 打赏
  • 举报
回复
到VC板块问估计会有人会。
zhouhuahai 2005-09-06
  • 打赏
  • 举报
回复
不懂.帮顶一个

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧