首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言从磁盘上读取数据解决办法

2012-03-09 
C语言从磁盘上读取数据干Java的,突然要用C语言做一个读取磁盘磁道上数据的程序,好像很简单的样子,但是没有

C语言从磁盘上读取数据
干Java的,突然要用C语言做一个读取磁盘磁道上数据的程序,好像很简单的样子,但是没有一点头绪。
对于C语言中的函数库根本不了解,希望哪位大虾不惜赐教,告诉我常用的函数库和一些主要的方法。
再把这个用C语言读取磁盘磁道上数据 的 算法或者说 实现程序的思想 阐述一下~多谢多谢。

[解决办法]

Assembly code
.............;以下读每一个扇区,StartRead:    mov ax, [SectAdr]    mov es, ax        ; es:bx,段地址    mov bx, [MemAdr]    ; es:bx,偏移地址    mov dl, 0h        ; 驱动器号    mov dh, [BeginSide]    ; 读写头号    mov ch, [BeginTrack]    ; 磁道号    mov cl, [BeginField]    ; 扇区号ReadField:    mov ah, 02h        ; 读磁盘    mov al, 01h        ; 一个扇区    int 13h            ; 磁盘服务中断    jc ReadField        ; 不成功重新读;读一个扇区后应该做以下调整    inc byte [BeginField]        ; 调整扇区号    cmp byte [BeginField], 013h    ; 每个磁道的一侧包括18个扇区,读完后要调整磁道号和磁头号    jne next0            ; 否则跃过磁道号与磁头号调整跳转到next0,只调整内存地址和扇区计数    mov byte [BeginField], 01h    ; 重新置扇区号,从1号开始到18号结束,而不是从0号开始    cmp byte [BeginSide], 00h    ; 查看磁头号,看是否需要增加磁道号    je  next1            ; 不需要则直接跳转到调整磁头号    inc byte [BeginTrack]        ; 调整磁道号next1:    xor byte [BeginSide], 0x01    ; 调整磁头号next0:    mov bx, [MemAdr]    add bx, 0x0200        ; 每读入一个扇区地址增加512个字节    mov [MemAdr], bx    ; 调整内存地址    inc byte [Num]        ; 调整读入扇区数    cmp byte [Num], 0x80    ; 检查是否读入128个扇区,即64k数据    jne next2        ; 如果不到64k,则跳转到next2,继续下一次读扇区操作        inc byte [Sect]        ; 如果达到64k,则增加读入段数计数值;即时显示,读完一个64k段在新的一行显示一个“Sect”        mov ax, cs    mov es, ax     mov ax, DoneSect    mov bp, ax         ;  ES:    BP = ...    mov cx, 6        ;  CX = ...    mov ax, 01301h     ;  AH = 13,  AL = 01h    mov bx, 000ch      ;  ...0(BH=0)....(BL=0Ch,..)    mov dh, byte [Sect];  第Sect,即新增加的行    mov dl, 0       ;  第0列    int 10h            ;  10h ...           mov byte [Num], 0h    mov bx, 0h    mov [MemAdr], bx    mov ax, [SectAdr]    ; 调整段地址    add ax, 0x1000    mov [SectAdr], ax    cmp byte [Sect], 01h    ; 如果读入1段则停止读入    je  next3    next2:    jc StartReadBeginTrack:    db 0x0        ; 开始磁道号BeginSide:    db 0x0        ; 开始磁头号BeginField:    db 0x2        ; 开始扇区号Num:        db 0x0        ; 读入扇区数Sect:        db 0x0        ; 读入段数MemAdr:        dw 0x0000    ; 偏移地址SectAdr:    dw 0x7000    ; 段地址.....................
[解决办法]
直接读取磁道里面的数据,应该涉及到底层的驱动了吧
如果涉及驱动就要等windows开源了
[解决办法]
磁盘也就个文件, 用你稀饭的文件操作的东东( fopen , open , CreateFile , fstream ... )打开, 定位到相应的磁道, 读写就是.

比如: 
fp = fopen( "\\\\.\\PhysicsDriver0" , "rb" );
ifstream ifs( "/dev/sda" , ios::binary );

热点排行
Bad Request.