/* floppy1.c
* Stefano Salvi - 25/9/02
* Programma che legge il boot sector di un disco (floppy o hard disk) con file system FAT
* e ne stampa le caratteristiche.
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/types.h>
#include <linux/msdos_fs.h>
int main(int argc, char **argv)
{
int fd; // File Descriptor per il dispositivo
struct fat_boot_sector boot; // Record nel quale leggere il primo settore
char *device = "/dev/fd0"; // Nome del file (dispositivo) da aprire
if (argc > 1) // Se c'e' almeno un parametro
{
device = argv [1]; // Prende il primo parametro e lo usa come 'dispositivo'
}
if((fd=open(device,O_RDONLY))==-1) // Apre il dispositivo
{
printf("Errore di apertura! Forse mancano i diritti sul dispositivo\n");
return 1;
}
read(fd,&boot,sizeof(boot)); // Legge il boot sector
// Stampa le caratteristiche interessanti
printf("\nNum\t\t Description\t\t\t Variabile\n");
printf("%s\t Volume Name\t\t\t (system_id[8])\n",boot.system_id);
printf("%d\t\t bytes per logical sector\t (sector_size[2])\n",
*(__u16 *)boot.sector_size); //dimensione settore
printf("%d\t\t sectors/cluster\t\t (cluster_size)\n",boot.cluster_size); //settori per cluster
printf("%d\t\t reserved sectors\t\t (reserved)\n",boot.reserved);
printf("%d\t\t number of FATs\t\t\t (fats)\n",boot.fats);
printf("%d\t\t root directory entries\t\t (dir_entries)\n",*(__u16 *)boot.dir_entries);
printf("%d\t\t number of sectors\t\t (sectors[2])\n",*(__u16*)boot.sectors);
printf("%d\t\t media code\t\t\t (media)\n",boot.media);
printf("%d\t\t sectors/FAT\t\t\t (fat_length)\n",boot.fat_length);
printf("%d\t\t sectors per track\t\t (secs_track)\n",(__u16)boot.secs_track);
printf("%d\t\t number of heads\t\t (heads)\n",boot.heads);
printf("%d\t\t hidden sectors\t\t\t (hidden)\n",boot.hidden);
printf("%d\t\t number of sectors\t\t (total_sect)\n\n",boot.total_sect);
return 0;
}
|