#include <linux/hdreg.h> /* per HDIO_GETGEO */ #include <linux/fs.h> /* per BLKGETSIZE e BLKRRPART */
I dischi SCSI hanno un numero primario di dispositivo di 8, e un numero secondario della forma (16 * numero_drive) + numero_partizione, dove numero_drive è il numero del disco fisico in ordine di rilevamento all'accensione del sistema, e numero_partizione è definito come segue:
la partizione 0 è l'intero disco
le partizioni 1-4 sono le partizioni DOS "primarie"
le partizioni 5-8 sono le partizioni DOS "estese" (o "logiche").
Per esempio, /dev/sda avrà numero primario 8, secondario 0, e farà riferimento all'intero primo drive SCSI nel sistema; e /dev/sdb3 avrà numero primario 8, secondario 19, e farà riferimento alla terza partizione DOS "primaria" nel secondo drive SCSI nel sistema.
Ad oggi sono forniti solo dispositivi a blocchi. I dispositivi raw non sono ancora stati implementati.
struct hd_geometry { unsigned char testine; unsigned char settori; unsigned short cilindri; unsigned long start; };
Un puntatore a questa struttura è passato come parametro di ioctl(2).
Le informazioni ritornate nel parametro sono la geometria del drive com'è vista dal DOS! Tale geometria non è la geometria fisica del disco. È comunque quella usata quando si costruisce la tabella delle partizioni del disco, ed è necessaria per le operazioni di fdisk(1), efdisk(1), e lilo(1). Se non sono disponibili le informazioni sulla geometria, verrà restituito zero per tutti i parametri.
Sono supportate anche le operazioni scsi(4) ioctl(2). Se è richiesto un parametro per ioctl(2), e questo è NULL, allora ioctl(2) fallirà, restituendo l'errore EINVAL.