Differenze tra le versioni di "Open ()"

Da Gambas-it.org - Wikipedia.
Riga 24: Riga 24:
 
   
 
   
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 +
 +
  Dim fd As Integer
 
   
 
   
 
  <FONT Color=gray>' ''Viene aperto in lettura un file di testo:''</font>
 
  <FONT Color=gray>' ''Viene aperto in lettura un file di testo:''</font>

Versione delle 09:22, 9 giu 2015

La funzione della libreria di C

int open(const char *pathname, int flags)

apre il file, individuato dall'argomento pathname, per le operazioni di lettura/scrittura come specificato nell'argomento flags. Essa restituisce il file-descriptor come collegamento al file aperto in lettura/scrittura. Tale file-descriptor è utilizzato da altre funzioni di I/O per fare riferimento al file aperto, al quale esso si riferisce.


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 "open" è omonima alla funzione di Gambas "Open", 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 open_C(pathname As String, flags As Integer) As Integer In "libc:6" Exec "open"


Semplice esempio di uso in Gambas:

Private Enum O_RDONLY = 0, O_WRONLY, O_RDWR

 
' int open(const char *pathname, int flags)
' Returns a file descriptor for the named file.
Private Extern open_C(pathname As String, flags As Integer) As Integer In "libc:6" Exec "open"

' int close(int fildes)
' Deallocates the file descriptor indicated by fildes.
Private Extern close_C As Integer In "libc:6" Exec "close"


Public Sub Main()

 Dim fd As Integer

' Viene aperto in lettura un file di testo:
  fd = open("/percorso/del/file/di/testo", O_RDONLY)
  
' Viene lanciato il programma editor di testo "Gedit", al quale si passa il file descriptor al file di testo appena sopra aperto:
  Shell "gedit /proc" &/ Str(Application.Id) &/ "fd" &/ CStr(fd) Wait

  close_C(fd)
    
End