Conoscere numero seriale, modello ed altre informazioni su hard-disk SATA con la funzione esterna ioctl()

Da Gambas-it.org - Wikipedia.
Versione del 9 lug 2016 alle 08:39 di Vuott (Discussione | contributi) (Creata pagina con "Utilizzando la funzione esterna ''ioctl()'', e facendo riferimento alla ''Struttura'' esterna ''hd_driveid'' del file header ''/usr/include/linux/hdreg.h'', è possibile otten...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Utilizzando la funzione esterna ioctl(), e facendo riferimento alla Struttura esterna hd_driveid del file header /usr/include/linux/hdreg.h, è possibile ottenere alcune informazioni, come numero seriale, modello etc., rlative a un hard-disk SATA..

Sarà necessario richiamare nel progetto Gambas la libreria dinamica condivisa: "libc.so.6"


Mostriamo di seguito un esempio pratico, avendo cura di eliminare la protezione al file-device "/dev/sda"

Library "libc:6"

Private Const HDIO_GET_IDENTITY As Integer = &030D

' int ioctl (int __fd, unsigned long int __request, ...)
' Perform the I/O control operation specified by REQUEST on FD.
Private Extern ioctl(__fd As Integer, __request As Long, drived As Pointer) As Integer 'Hd_driveid) As Integer


Public Sub Main()
 
 Dim hd As Pointer
 Dim fl As File
 Dim err As Integer
 

   fl = Open "/dev/sda" For Read
   
   hd = Alloc(512)
  
   err = ioctl(fl.Handle, HDIO_GET_IDENTITY, hd)
   If err < 0 Then Error.Raise("Errore alla funzione 'ioctl()' !")
   
   Print "Cilindri:       "; Short@(hd + 2)
   Print "Heads:          "; Short@(hd + 6)
   Print "Settori:        "; Short@(hd + 12)
   Print "Numero seriale: "; String@(hd + 20)
   Print "Firmware rev.:  "; String@(hd + 46)
   Print "Modello:        "; String@(hd + 54)
   
   Free(hd)
   fl.Close
  
End