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 StartRead

BeginTrack:    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 );