Differenze tra le versioni di "Ottenere la descrizione del tipo di errore dai file header "errno-base.h" e "errno.h""

Da Gambas-it.org - Wikipedia.
Riga 3: Riga 3:
 
Essendo tali file header sostanzialmente dei file di testo, è abbastanza agevole, volendo, estrarre da essi sulla base del valore di errore, ritornato dalla funzione esterna, la descrizione di questo presente nel file ''header''.
 
Essendo tali file header sostanzialmente dei file di testo, è abbastanza agevole, volendo, estrarre da essi sulla base del valore di errore, ritornato dalla funzione esterna, la descrizione di questo presente nel file ''header''.
  
Nell'esempio fingiamo di ricevere un errore rappresentato dal valore "9":
+
Nell'esempio che segue, avremo una libreria condivisa esterna, da noi scritta in C, con la quale fingiamo di provocare un errore "9", che sarà successivamente raccolto dal nostro codice Gambas mediante il Metodo "[ .Error]" della Classe ''System''.
 +
<FONT Color=gray>' ''void simula_errore()''</font>
 +
Private Extern simula_errore() In "/tmp/liberrore"
 +
 +
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
 
   Dim s, err As String
 
   Dim s, err As String
 
   Dim fl As File
 
   Dim fl As File
    
+
  <FONT Color=gray>' ''Fingiamo di ricevere l'errore numero 9:''</font>
+
<FONT Color=gray>' ''Va a creare la libreria condivisa esterna, che simulerà la sollevazione di un errore "9":''</font>
   err = "9"
+
   Creaso()
 +
 +
  <FONT Color=gray>' ''Simula la sollevazione di un errore "9":''</font>
 +
  simula_errore()
 +
 +
<FONT Color=gray>' ''Raccoglie l'errore:''</font>
 +
   err = System.Error
 
   
 
   
 
   fl = Open "/usr/include/asm-generic/errno-base.h"
 
   fl = Open "/usr/include/asm-generic/errno-base.h"
Riga 18: Riga 28:
 
   Next
 
   Next
 
   fl.Close
 
   fl.Close
   
+
 
   fl = Open "/usr/include/asm-generic/errno.h"
 
   fl = Open "/usr/include/asm-generic/errno.h"
 
   For Each s In fl.Lines
 
   For Each s In fl.Lines
Riga 24: Riga 34:
 
   Next
 
   Next
 
   fl.Close
 
   fl.Close
   
+
 +
'''End'''
 +
 +
'''Private''' Procedure Creaso()
 +
 +
  File.Save("/tmp/liberrore.c", "#include <errno.h>\n\n" &
 +
                                "void simula_errore() {\n" &
 +
                                "  '''errno = 9''';\n}")
 +
 +
  Shell "gcc -o /tmp/liberrore.so /tmp/liberrore.c -shared -fPIC" Wait
 +
 
  '''End'''
 
  '''End'''

Versione delle 17:18, 5 ott 2022

Molte funzioni esterne in caso errore ritornano tipi di errore contenuti e descritti nei file header errno-base.h e errno.h.

Essendo tali file header sostanzialmente dei file di testo, è abbastanza agevole, volendo, estrarre da essi sulla base del valore di errore, ritornato dalla funzione esterna, la descrizione di questo presente nel file header.

Nell'esempio che segue, avremo una libreria condivisa esterna, da noi scritta in C, con la quale fingiamo di provocare un errore "9", che sarà successivamente raccolto dal nostro codice Gambas mediante il Metodo "[ .Error]" della Classe System.

' void simula_errore()
Private Extern simula_errore() In "/tmp/liberrore"


Public Sub Main()

 Dim s, err As String
 Dim fl As File

' Va a creare la libreria condivisa esterna, che simulerà la sollevazione di un errore "9":
 Creaso()

' Simula la sollevazione di un errore "9":
 simula_errore()

' Raccoglie l'errore:
 err = System.Error

 fl = Open "/usr/include/asm-generic/errno-base.h"

 For Each s In fl.Lines
   If s Like "* " & err & " *" Then Print "Errore n. "; err; ": "; Scan(s, "*/*/*")[1]
 Next
 fl.Close

 fl = Open "/usr/include/asm-generic/errno.h"
 For Each s In fl.Lines
   If s Like "* " & err & " *" Then Print "Errore n. "; err; ": "; Scan(s, "*/*/*")[1]
 Next
 fl.Close

End

Private Procedure Creaso()

 File.Save("/tmp/liberrore.c", "#include <errno.h>\n\n" &
                               "void simula_errore() {\n" &
                               "   errno = 9;\n}")

 Shell "gcc -o /tmp/liberrore.so /tmp/liberrore.c -shared -fPIC" Wait

End