Tôi đang cố gắng in bảng phân vùng bằng ngôn ngữ lập trình C, mọi thứ có vẻ hoạt động tốt: Mở và đọc, nhưng tôi không hiểu tại sao lại in các giá trị rác.Bảng phân vùng in - Chương trình C
Đây là mã:
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;
}
Nó được in rác thay vì bảng phân vùng.
Tôi có thể có một số vấn đề về hiểu biết cơ bản nhưng tôi đã tìm kiếm với Google trong một thời gian dài nhưng thực sự không giúp ích gì. Tôi cũng thấy mã nguồn của fdisk nhưng nó vượt quá sự hiểu biết của tôi vào thời điểm này. Bất cứ ai có thể vui lòng hướng dẫn tôi? Tôi không mong ai đó xóa lỗi của tôi và đưa cho tôi mã số làm việc. Chỉ một hoặc hai câu - hoặc bất kỳ liên kết nào.
Bạn có xem xét nhìn vào mã nguồn của 'fdisk' hoặc tiện ích phân vùng khác? –
@BasileStarynkevitch Starynkevitch Có ông đã làm theo bài viết của mình. @Adorn Sự cố của bạn xảy ra trong dòng này? 'printf (" \ n \ t \ t ************* Bảng phân vùng **************** \ n \ n ");'? Hay bạn có nghĩa là đầu ra sau đó? – xQuare
loại 'drive'variable là gì? –