Μια πρακτική χρήση μιας ένωσης στην αποκατάσταση στοιχείων
Τώρα δείτε μια πρακτική χρήση της ένωσης είναι προγραμματισμός αποκατάστασης στοιχείων. Πάρτε ένα μικρό παράδειγμα. Το ακόλουθο πρόγραμμα είναι το μικρό πρότυπο του κακού προγράμματος ανίχνευσης τομέα γιατί μια κίνηση δισκετών (α:) εντούτοις αυτό δεν είναι το πλήρες πρότυπο του κακού λογισμικού ανίχνευσης τομέα.
Εξετάστε το πρόγραμμα:
#include<dos.h>
#include<conio.h>
int main()
{
int rp, head, track, sector, status;
char *buf;
union REGS in, out;
struct SREGS s;
clrscr();
/* Επαναρυθμίστε το σύστημα δίσκων που μονογράφει στο δίσκο */
printf("\n Resetting the disk system....");
for(rp=0;rp<=2;rp++)
{
in.h.ah = 0;
in.h.dl = 0x00;
int86(0x13,&in,&out);
}
printf("\n\n\n Now Testing the Disk for Bad Sectors....");
/* scan for bad sectors */
for(track=0;track<=79;track++)
{
for(head=0;head<=1;head++)
{
for(sector=1;sector<=18;sector++)
{
in.h.ah = 0x04;
in.h.al = 1;
in.h.dl = 0x00;
in.h.ch = track;
in.h.dh = head;
in.h.cl = sector;
in.x.bx = FP_OFF(buf);
s.es = FP_SEG(buf);
int86x(0x13,&in,&out,&s);
if(out.x.cflag)
{
status=out.h.ah;
printf("\n track:%d Head:%d Sector:%d Status ==0x%X",track,head,sector,status);
}
}
}
}
printf("\n\n\nDone");
return 0;
}
Τώρα δείτε τι η παραγωγή της θα μοιάσει με εάν υπάρχει κακός τομέας στη δισκέτα:
Resetting the disk system....
Now Testing the Disk for Bad Sectors....
track:0 Head:0 Sector:4 Status ==0xA
track:0 Head:0 Sector:5 Status ==0xA
track:1 Head:0 Sector:4 Status ==0xA
track:1 Head:0 Sector:5 Status ==0xA
track:1 Head:0 Sector:6 Status ==0xA
track:1 Head:0 Sector:7 Status ==0xA
track:1 Head:0 Sector:8 Status ==0xA
track:1 Head:0 Sector:11 Status ==0xA
track:1 Head:0 Sector:12 Status ==0xA
track:1 Head:0 Sector:13 Status ==0xA
track:1 Head:0 Sector:14 Status ==0xA
track:1 Head:0 Sector:15 Status ==0xA
track:1 Head:0 Sector:16 Status ==0xA
track:1 Head:0 Sector:17 Status ==0xA
track:1 Head:0 Sector:18 Status ==0xA
track:1 Head:1 Sector:5 Status ==0xA
track:1 Head:1 Sector:6 Status ==0xA
track:1 Head:1 Sector:7 Status ==0xA
track:1 Head:1 Sector:8 Status ==0xA
track:1 Head:1 Sector:9 Status ==0xA
track:1 Head:1 Sector:10 Status ==0xA
track:1 Head:1 Sector:11 Status ==0xA
track:1 Head:1 Sector:12 Status ==0xA
track:1 Head:1 Sector:13 Status ==0xA
track:1 Head:1 Sector:14 Status ==0xA
track:1 Head:1 Sector:15 Status ==0xA
track:1 Head:1 Sector:16 Status ==0xA
track:1 Head:1 Sector:17 Status ==0xA
track:1 Head:1 Sector:18 Status ==0xA
track:2 Head:0 Sector:4 Status ==0xA
track:2 Head:0 Sector:5 Status ==0xA
track:14 Head:0 Sector:6 Status ==0xA
Done |
Μπορεί να είναι λίγο δύσκολο να γίνουν κατανοητές οι λειτουργίες και διακόπτει χρησιμοποιημένος σε αυτό το πρόγραμμα για να ελεγχθεί ο δίσκος για τους κακούς τομείς και την επαναρύθμιση του συστήματος δίσκων κ.λπ. αλλά δεν πρέπει να ανησυχήσετε, πρόκειται να μάθουμε όλα αυτά τα πράγματα στο ΖΩΝΤΑΝΌ ΟΝ και να διακόψουμε τα τμήματα προγραμματισμού αργότερα στα επόμενα ερχόμενα κεφάλαια.
|