Differenze tra le versioni di "Open ()"

Da Gambas-it.org - Wikipedia.
 
(9 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
La funzione della libreria di C
 
La funzione della libreria di C
  int open(const char *pathname, int flags)
+
  int open(const char *__file, int __oflag, ...)
 
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.
 
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.
 
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''" è <SPAN style="text-decoration:underline">omonima</span> alla funzione di Gambas "''Open''", bisognerà assegnarle un nome a piacere, ma si dovrà anche richiamare il suo vero nome con il comando ''Exec''.
+
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''" è <SPAN style="text-decoration:underline">omonima</span> alla funzione di Gambas "''Open''", bisognerà assegnarle un nome a piacere, ma si dovrà anche richiamare il suo vero nome con il comando ''Exec''.
 
<BR>Dunque avremo ad esempio:
 
<BR>Dunque avremo ad esempio:
  Private <FONT color=#B22222>Extern open_C</font>(pathname As String, flags As Integer) As Integer In "<FONT color=#B22222>libc:6"</font> <FONT color=#B22222>'''Exec "open"'''</font>
+
  Private <FONT color=#B22222>Extern open_C</font>(__file As String, oflag As Integer) As Integer In "<FONT color=#B22222>libc:6"</font> <FONT color=#B22222>'''Exec "open"'''</font>
  
  
 
Semplice esempio di uso in Gambas:
 
Semplice esempio di uso in Gambas:
  Private Enum O_RDONLY = 0, O_WRONLY, O_RDWR
+
  Library "libc:6"
 
   
 
   
 
+
Private Enum O_RDONLY = 0, O_WRONLY, O_RDWR, O_ACCMODE, O_CREAT = &100, O_APPEND = &2000
  <FONT color=Gray>' ''int open(const char *pathname, int flags)''
+
 
  ' ''Returns a file descriptor for the named file.''</font>
+
  <FONT color=Gray>' ''int open(const char *__file, int __oflag, ...)''
  Private <FONT color=#B22222>Extern open_C</font>(pathname As String, flags As Integer) As Integer In "<FONT color=#B22222>libc:6</font>" <FONT color=#B22222>'''Exec "open"'''</font>
+
  ' ''Open FILE and return a new file descriptor for it.''</font>
 +
  Private Extern <FONT color=#B22222>open_C</font>(__file As String, oflag As Integer) As Integer <FONT color=#B22222>'''Exec "open"'''</font>
 
   
 
   
  <FONT color=Gray>' ''int close(int fildes)''
+
  <FONT color=Gray>' ''int close(int _fd)''
 
  ' ''Deallocates the file descriptor indicated by fildes.''</font>
 
  ' ''Deallocates the file descriptor indicated by fildes.''</font>
  Private Extern close_C As Integer In "libc:6" Exec "close"
+
  Private Extern close_C(_fd As Integer) As Integer Exec "close"
 
   
 
   
 
   
 
   
Riga 28: Riga 29:
 
   
 
   
 
  <FONT Color=gray>' ''Viene aperto in lettura un file di testo:''</font>
 
  <FONT Color=gray>' ''Viene aperto in lettura un file di testo:''</font>
   <FONT color=#B22222>fd = open("<FONT Color=gray>''/percorso/del/file/di/testo''</font>", O_RDONLY)</font>
+
   <FONT color=#B22222>fd = open_C("<FONT Color=gray>''/percorso/del/file''</font>", O_RDONLY)</font>
 
    
 
    
  <FONT Color=gray>' ''Viene lanciato il programma editor di testo "Gedit", al quale si passa il file descriptor al file di testo appena sopra aperto:''</font>
+
  <FONT Color=gray>' ''Per questo esempio viene semplicemente mostrato il numero del "file descriptor" del file aperto:''</font>
   Shell "gedit /proc" &/ Str(Application.Id) &/ "fd" &/ CStr(fd) Wait
+
   Print fd
 
   
 
   
 
   close_C(fd)
 
   close_C(fd)
 
      
 
      
 
  '''End'''
 
  '''End'''

Versione attuale delle 13:07, 11 set 2018

La funzione della libreria di C

int open(const char *__file, int __oflag, ...)

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(__file As String, oflag As Integer) As Integer In "libc:6" Exec "open"


Semplice esempio di uso in Gambas:

Library "libc:6"

Private Enum O_RDONLY = 0, O_WRONLY, O_RDWR, O_ACCMODE, O_CREAT = &100, O_APPEND = &2000
  
' int open(const char *__file, int __oflag, ...)
' Open FILE and return a new file descriptor for it.
Private Extern open_C(__file As String, oflag As Integer) As Integer Exec "open"

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


Public Sub Main()

 Dim fd As Integer

' Viene aperto in lettura un file di testo:
  fd = open_C("/percorso/del/file", O_RDONLY)
  
' Per questo esempio viene semplicemente mostrato il numero del "file descriptor" del file aperto:
  Print fd

  close_C(fd)
    
End