在DOS下,getdfree()得到的信息,硬盘最大只能到2G,如果分区大于5G怎么办

甜在心馒头 2001-08-24 03:21:06
我的分区有5G,怎么办,我察看了以前的讨论,都没有具体的解决方法,
我想得到硬盘比如C的总的大小,想做一个DOS的网络拷贝程序
希望得到高手的帮助,我的竹叶http://mantousoft.51.net
欢迎大家与我交流。
...全文
183 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
甜在心馒头 2001-08-26
  • 打赏
  • 举报
回复
感谢yhq:我有一点眉目了,我下去仔细研究一下:)
感谢各位!!有空来我的竹叶看看:mantousoft.51.net
甜在心馒头 2001-08-25
  • 打赏
  • 举报
回复
to fsb_12345:你说的函数我知道,那个函数得到的值最大只能有2G的空间大小,所以我才问了这个问题,还有,我看到好象有人说用int13可以搞顶,也不知道具体怎么操作,我想做比如C盘按照扇区进行全盘拷贝,还有个问题就是比如C盘从哪个扇区开始,哪个扇区结束,希望哪位能帮帮我,感激不尽!!!
yhq 2001-08-25
  • 打赏
  • 举报
回复
mantousoft :祝贺你,我刚刚把硬盘上的数据从死亡边缘挽救出来.所以对这个问题比较清楚.
1)硬盘有三个参数:磁头(H, 0-255),柱面(C, 0-1023),扇区(S, 1-63).
2)分区信息的源头在主引导纪录(MBR).即H=0,C=0,S=1.也就是物理硬盘上的第一个扇区,绝对扇区号0.
3)在MBR的偏移0x1be-0x1fe依次是4条分区信息,每条16bytes.格式如下:
offset length meaning
0 1 bootable indicator
1 1 起始磁头号
2 1 低6位是起始扇区号,高2位是起始柱面号的高2位(柱面号有10bits)
3 1 起始柱面号的低8位
4 1 系统标志.0x06:fat16,0x07:HPFS/NTFS,0x0b:fat32,0x83:linux
5 1 结束磁头号
6 1 低6位是结束扇区号,高2位是结束柱面号的高2位(柱面号有10bits)
7 1 结束柱面号的低8位
8 4 起始绝对扇区号
c 4 该分区扇区数
4)如果你的第一个分区是os认识的,那么就是c盘,且对应第一条分区信息,即0x1be-0x1cd
c盘的开始扇区在偏移8处可得.结束扇区通过偏移8和偏移c可得
5)之所以要用int13,是因为MBR在c盘之外.高层的文件系统甚至不知道MBR的存在.
6)对于大于8G的空间,我也不知道怎样表示.谁能告知,不慎感谢.
甜在心馒头 2001-08-25
  • 打赏
  • 举报
回复
怎么超过那个2G的限制呀,救命呀!!~~
jimgreen 2001-08-25
  • 打赏
  • 举报
回复
up
jimgreen 2001-08-25
  • 打赏
  • 举报
回复
up
Highway2000 2001-08-25
  • 打赏
  • 举报
回复
直接调 DOS 中断服务。

关于 C 盘的起止位置,可从硬盘分区表中得到
fsb_12345 2001-08-24
  • 打赏
  • 举报
回复
void getdfree(int drive,struct dfree *dfreep)
本函数用来取磁盘的自由空间,
drive为磁盘号(0=当前,1=A等).函数将磁盘特性的由dfreep指向的dfree结构中. Dfree结构如下:
┌───────────────────┐
│struct dfree │
│{ │
│ unsigned df_avail; /*有用簇个数*/ │
│ unsigned df_total; /*总共簇个数*/ │
│ unsigned df_bsec; /*每个扇区字节数*/│
│ unsigned df_sclus; /*每个簇扇区数*/ │
│} │
└───────────────────┘
把四个直取得后,计算出来,看行不行,我没有时间来帮你,因为我还有工作要做
佣工7001 2001-08-24
  • 打赏
  • 举报
回复
我看只能读取分区表自己计算,具体我没作过

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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