Printf (): differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 36: | Riga 36: | ||
Print | Print | ||
'''End''' | |||
ed in modo più complesso leggendo dal file-device ''pts'' con l'istruzione ''Input'' o anche ''Input Line'': | |||
'''Public''' Sub Button1_Click() | |||
Dim fl As File | |||
Dim s As String | |||
<FONT color=gray>' ''Apriamo il file-device Dereferenziamo il Puntatore per ottenere il testo.'' | |||
''<FONT color=#B22222>n</font> rappresenta il file-device corrispondente allo stdout:''</font> | |||
fl = Open "/dev/pts/<FONT color=#B22222>n</font>" For Input | |||
printf("Prova funzione 'printf'") | |||
Input #fl, s | |||
'''End''' | |||
oppure leggendo il ''file-descriptor'' | |||
'''Public''' Sub Button1_Click() | |||
Dim fl As File | |||
Dim s As String | |||
<FONT color=gray>' ''Apriamo il file-device Dereferenziamo il Puntatore per ottenere il testo.'' | |||
' ''<FONT color=#B22222>n</font> rappresenta e deve quindi ovviamente essere sostituito'' | |||
' ''con il file-device "pts" corrispondente allo "stdout":''</font> | |||
fl = Open "/proc/self/fd/1" For Input | |||
printf("Prova funzione 'printf'") | |||
Input #fl, s | |||
'''End''' | '''End''' | ||
Versione delle 18:23, 30 lug 2013
La funzione della libreria di C
int printf(const char *format, ...)
scrive su stdout gli argomenti stringa passati.
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché la libreria di C: libc.so.6, nella quale la funzione è contenuta:
Private Extern printf(testo As String, ....) As Pointer
Per ottenere il risultato in console, bisognerà far ritornare dalla funzione una variabile di tipo puntatore e non di tipo stringa, altrimenti sarà sollevato un errore "Segmentation fault (11)" !
Semplice esempio uso in Gambas:
Private Extern printf(testo As String) As Pointer In "libc:6"
Public Sub Button1_Click()
Dim p As Pointer
Dim s As String
p = printf("Prova funzione 'printf'")
' Dereferenziamo il Puntatore per ottenere il testo:
s = String@(p)
Print s
End
Si potrà, però, ottenere più velocemente il medesimo risultato ponendo un semplice Print dopo la funzione Printf:
Public Sub Button1_Click()
p = printf("Prova funzione 'printf'")
Print
End
ed in modo più complesso leggendo dal file-device pts con l'istruzione Input o anche Input Line:
Public Sub Button1_Click()
Dim fl As File
Dim s As String
' Apriamo il file-device Dereferenziamo il Puntatore per ottenere il testo.
n rappresenta il file-device corrispondente allo stdout:
fl = Open "/dev/pts/n" For Input
printf("Prova funzione 'printf'")
Input #fl, s
End
oppure leggendo il file-descriptor
Public Sub Button1_Click()
Dim fl As File
Dim s As String
' Apriamo il file-device Dereferenziamo il Puntatore per ottenere il testo.
' n rappresenta e deve quindi ovviamente essere sostituito
' con il file-device "pts" corrispondente allo "stdout":
fl = Open "/proc/self/fd/1" For Input
printf("Prova funzione 'printf'")
Input #fl, s
End