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 | + | 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>' '' | + | <FONT Color=gray>' ''Va a creare la libreria condivisa esterna, che simulerà la sollevazione di un errore "9":''</font> |
− | err = | + | 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