Differenze tra le versioni di "Printf ()"
Da Gambas-it.org - Wikipedia.
Riga 47: | Riga 47: | ||
− | <FONT color=gray>' ''Apriamo il file-device | + | <FONT color=gray>' ''Apriamo il "file-device pts". <FONT color=#B22222>n</font> rappresenta e deve quindi ovviamente essere sostituito'' |
− | + | ' ''con il file-device "pts" corrispondente allo "stdout":''</font> | |
− | |||
fl = Open "/dev/pts/<FONT color=#B22222>n</font>" For Input | fl = Open "/dev/pts/<FONT color=#B22222>n</font>" For Input | ||
Riga 64: | Riga 63: | ||
− | <FONT color=gray>' ''Apriamo il file- | + | <FONT color=gray>' ''Apriamo il "file-descriptor" corrispondente allo "stdout":''</font> |
− | |||
− | |||
− | |||
fl = Open "/proc/self/fd/1" For Input | fl = Open "/proc/self/fd/1" For Input | ||
Versione delle 17:28, 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 pts". n rappresenta e deve quindi ovviamente essere sostituito ' con il file-device "pts" 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-descriptor" corrispondente allo "stdout": fl = Open "/proc/self/fd/1" For Input printf("Prova funzione 'printf'") Input #fl, s End