Differenze tra le versioni di "Printf ()"

Da Gambas-it.org - Wikipedia.
Riga 47: Riga 47:
 
   
 
   
 
   
 
   
  <FONT color=gray>' ''Apriamo il file-device Dereferenziamo il Puntatore per ottenere il testo.''
+
  <FONT color=gray>' ''Apriamo il "file-device pts". <FONT color=#B22222>n</font> rappresenta e deve quindi ovviamente essere sostituito''
''<FONT color=#B22222>n</font> rappresenta il file-device corrispondente allo stdout:''</font>
+
' ''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-device Dereferenziamo il Puntatore per ottenere il testo.''
+
  <FONT color=gray>' ''Apriamo il "file-descriptor" corrispondente allo "stdout":''</font>
' ''<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
 
   fl = Open "/proc/self/fd/1" For Input
 
   
 
   

Versione delle 18: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