Differenze tra le versioni di "Read ()"

Da Gambas-it.org - Wikipedia.
Riga 10: Riga 10:
  
 
Mostriamo un semplice esempio pratico, nel quale il programma leggerà quanto scritto nel Terminale dall'utente:
 
Mostriamo un semplice esempio pratico, nel quale il programma leggerà quanto scritto nel Terminale dall'utente:
  Private Const stdin As Integer = 0
+
  Library "libc:6"
 
   
 
   
  Library "libc:6"
+
  Private Enum O_RDONLY = 0, O_WRONLY, O_RDWR
 
   
 
   
 
  <FONT Color=gray>' ''ssize_t read (int __fd, void *__buf, size_t __nbytes)''
 
  <FONT Color=gray>' ''ssize_t read (int __fd, void *__buf, size_t __nbytes)''
Riga 23: Riga 23:
 
   Dim bb As New Byte[16]
 
   Dim bb As New Byte[16]
 
    
 
    
   <FONT color=#B22222>read_C</font>(stdin, bb.Data, 16)
+
   <FONT color=#B22222>read_C</font>(O_RDONLY, bb.Data, 16)
 
    
 
    
 
   Print String@(bb.Data)
 
   Print String@(bb.Data)

Versione delle 19:26, 10 giu 2017

La funzione read( ), dichiarata nel file header "/usr/include/unistd.h"

ssize_t read (int __fd, void *__buf, size_t __nbytes)

legge da un file usando il suo file descriptor (1° parametro) un numero di byte definito nel suo 3° parametro, memorizzandoli nel buffer stabilito nel 2° parametro.


Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta. Da sottolineare che, poiché questa funzione esterna di C "read( )" è omonima alla funzione di Gambas "Read", bisognerà assegnarle un nome a piacere, ma si dovrà anche richiamare il suo vero nome con il comando Exec.
Dunque avremo ad esempio:

Private Extern read_C(_fd As Integer, __buf As Pointer, __nbytes As Long) As Long In "libc:6" Exec "read"


Mostriamo un semplice esempio pratico, nel quale il programma leggerà quanto scritto nel Terminale dall'utente:

Library "libc:6"

Private Enum O_RDONLY = 0, O_WRONLY, O_RDWR

' ssize_t read (int __fd, void *__buf, size_t __nbytes)
' Read NBYTES into BUF from FD.
Private Extern read_C(__fd As Integer, __buf As Pointer, __nbytes As Long) As Long Exec "read"


Public Sub Main()
 
 Dim bb As New Byte[16]
 
  read_C(O_RDONLY, bb.Data, 16)
 
  Print String@(bb.Data)
  
End



Riferimenti