Ich versuche, eine Partitionstabelle mit C-Programmiersprache zu drucken, scheint alles gut zu funktionieren: Öffnen und Lesen, aber ich verstehe nicht, warum es Garbage-Werte gedruckt wird. HierDrucken Partitionstabelle - C-Programm
ist der Code:
struct partition
{
unsigned char drive;
unsigned char chs_begin[3];
unsigned char sys_type;
unsigned char chs_end[3];
unsigned char start_sector[4];
unsigned char nr_sector[4];
};
int main()
{
int gc = 0, i = 1, nr = 0, pos = -1, nw = 0;
int fd =0;
char buf[512] ;
struct partition *sp;
printf("Ok ");
if ((fd = open("/dev/sda", O_RDONLY | O_SYNC)) == -1)
{
perror("Open");
exit(1);
}
printf("fd is %d \n", fd);
pos = lseek (fd, 0, SEEK_CUR);
printf("Position of pointer is :%d\n", pos);
if ((nr = read(fd, buf, sizeof(buf))) == -1)
{
perror("Read");
exit(1);
}
close(fd);
printf("Size of buf = %d\n and number of bytes read are %d ", sizeof(buf), nr);
if ((nw = write(1, buf, 64)) == -1)
{
printf("Write: Error");
exit(1);
}
printf("\n\n %d bytes are just been written on stdout\n", nw,"this can also be printed\n");
printf("\n\t\t*************Partition Table****************\n\n");
for (i=0 ; i<4 ; i++)
{
sp = (struct partition *)(buf + 446 + (16 * i));
putchar(sp -> drive);
}
return 0;
}
Es druckt Müll statt Partitionstabelle.
Ich könnte ein paar grundlegende Verständnisprobleme haben, aber ich habe lange mit Google gesucht, aber es hat nicht wirklich geholfen. Ich habe auch den Quellcode von fdisk gesehen, aber ich kann es nicht verstehen. Könnte jemand mich bitte führen? Ich erwarte nicht, dass jemand meinen Fehler löscht und mir den Arbeitscode gibt. Nur ein Satz oder zwei - oder irgendein Link.
Halten Sie suchen in den Quellcode von 'fdisk' oder anderem Partitionierungsprogramm? –
@BasileStarynkevitch Starynkevitch Ja, hat er nach seinem Posten gemacht. @Adorn Ihr Problem tritt in dieser Zeile auf? 'printf (" \ n \ t \ t ************* Partitionstabelle ****************** \ n \ n ");'? Oder meintest du die Ausgabe danach? – xQuare
Was ist 'Laufwerk'variable Typ? –