Differenze tra le versioni di "Tmpfile ()"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "La funzione '''''tmpfile( )''''', dichiarata nel file header di sistema "''/usr/include/stdio.h''" FILE *tmpfile (void) crea un file temporaneo e lo apre contemporaneamente i...")
 
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
La funzione '''''tmpfile( )''''', dichiarata nel file header di sistema "''/usr/include/stdio.h''"
 
La funzione '''''tmpfile( )''''', dichiarata nel file header di sistema "''/usr/include/stdio.h''"
 
  FILE *tmpfile (void)
 
  FILE *tmpfile (void)
crea un file temporaneo e lo apre contemporaneamente in lettura ed in scrittura.
+
crea un file temporaneo e lo apre in modalità binaria contemporaneamente in lettura ed in scrittura.
  
La funzione ''tmpfile( )'' ritorna un ''Puntatore'' di tipo ''FILE *'', dichiarato nella citata libreria standard "''stdio.h''", che in Gambas andrà opportunamente gestito con le medesime modalità previste per detto tipo di ''Puntatore'' creato con la funzione ''fopen( )''. Esso, pertanto, andrà chiuso esclusivamente con la funzione esterna ''fclose()''.
+
La funzione "tmpfile()" ritorna un ''Puntatore'' di tipo ''FILE *'', dichiarato nella citata libreria standard "''stdio.h'' ", che in Gambas andrà opportunamente gestito con le medesime modalità previste per detto tipo di ''Puntatore'' creato con la funzione "fopen()". Si utilizzeranno, pertanto, le funzioni esterne "fread()", "fwrite()", "fseek()", etc. Il ''Puntatore'', infine, andrà chiuso esclusivamente con la funzione esterna "fclose()".
  
  
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
 
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché bisognerà dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta:
 
  Private <FONT color=#B22222>Extern tmpfile</font>() As Pointer In "<FONT color=#B22222>libc:6</font>"
 
  Private <FONT color=#B22222>Extern tmpfile</font>() As Pointer In "<FONT color=#B22222>libc:6</font>"
 
 
 
Mostriamo un semplice esempio:
 
Mostriamo un semplice esempio:
 
  Library "libc:6"
 
  Library "libc:6"
 +
 +
Private Enum SEEK_SET = 0, SEEK_CUR, SEEK_END
 
   
 
   
 
  <FONT Color=gray>' ''FILE *tmpfile (void)''
 
  <FONT Color=gray>' ''FILE *tmpfile (void)''
Riga 17: Riga 17:
 
  Private Extern tmpfile() As Pointer
 
  Private Extern tmpfile() As Pointer
 
   
 
   
 +
<FONT color=gray>' ''size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream)''
 +
' ''Write chunks of generic data to STREAM.''</font>
 +
Private Extern fwrite(ptr As String, size As Integer, nmemb As Integer, filestream As Pointer) As Integer
 +
   
 +
<FONT color=gray>' ''int fseek(FILE *stream, long offset, int whence)''
 +
' ''Seek to a certain position on STREAM.''</font>
 +
Private <FONT color=#B22222>Extern fseek</font>(streamp As Pointer, offset As Long, whence As Integer) As Integer
 +
 +
<FONT color=gray>' ''size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)''
 +
' ''Read chunks of generic data from STREAM.''</font>
 +
Private Extern fread(ptr As Pointer, size As Integer, nmemb As Integer, streamp As Pointer) As Integer
 +
 
 
  <FONT Color=gray>' ''int fclose (FILE *__stream)''
 
  <FONT Color=gray>' ''int fclose (FILE *__stream)''
 
  ' ''Close STREAM.''</font>
 
  ' ''Close STREAM.''</font>
Riga 22: Riga 34:
 
   
 
   
 
   
 
   
   '''Public''' Sub Main()
+
   Public Sub Main()
 +
 
 +
  Dim p, ris As Pointer
 +
  Dim s As string
 +
  Dim i As Integer
 
    
 
    
   Dim p As Pointer
+
   s = "Testo qualsiasi"
 +
  i = Len(s)
 +
 
 +
  p = <FONT Color=#B22222>tmpfile()</font>
 +
  If p == 0 Then Error.Raise("Impossibile creare il file temporaneo !")
 +
 
 +
<FONT Color=gray>' ''Scriviamo il contenuto della stringa "s" nel Puntatore "p" creato.''</font>
 +
  fwrite(s, i, 1, p)
 +
 
 +
<FONT Color=gray>' ''E' necessario tornare all'inizio dell'area puntata dal Puntatore "p":''</font>
 +
  fseek(p, 0, SEEK_SET)
 
    
 
    
  p = <FONT Color=#B22222>tmpfile()</font>
+
<FONT Color=gray>' ''Leggiamo i dati dal Puntatore "p" creato e li scriviamo nel Puntatore "ris":''</font>
  If p = 0 Then Error.Raise("Impossibile creare il file temporaneo !")
+
  ris = Alloc(SizeOf(gb.Byte), i)
 +
  fread(ris, i, 1, p)
 
    
 
    
  <FONT Color=gray>' ''Qui si può utilizzare il puntatore "p" creato.''
+
  <FONT Color=gray>' ''Leggiamo la stringa:''</font>
  ......
+
  Print String@(ris) 
  ......</font>
 
 
    
 
    
  fclose(p)
+
<FONT Color=gray>' ''Liberiamo la memoria precedentemente occupata:''</font>
 +
  Free(ris)
 +
  fclose(p)
 
    
 
    
  '''End'''
+
  End
 +
 
 +
 
 +
 
 +
=Riferimenti=
 +
* http://linux.die.net/man/3/tmpfile
 +
* http://www.gnu.org/software/libc/manual/html_node/Temporary-Files.html
 +
* http://pubs.opengroup.org/onlinepubs/009695399/functions/tmpfile.html

Versione attuale delle 15:06, 15 giu 2024

La funzione tmpfile( ), dichiarata nel file header di sistema "/usr/include/stdio.h"

FILE *tmpfile (void)

crea un file temporaneo e lo apre in modalità binaria contemporaneamente in lettura ed in scrittura.

La funzione "tmpfile()" ritorna un Puntatore di tipo FILE *, dichiarato nella citata libreria standard "stdio.h ", che in Gambas andrà opportunamente gestito con le medesime modalità previste per detto tipo di Puntatore creato con la funzione "fopen()". Si utilizzeranno, pertanto, le funzioni esterne "fread()", "fwrite()", "fseek()", etc. Il Puntatore, infine, andrà chiuso esclusivamente con la funzione esterna "fclose()".


Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché bisognerà dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:

Private Extern tmpfile() As Pointer In "libc:6"

Mostriamo un semplice esempio:

Library "libc:6"

Private Enum SEEK_SET = 0, SEEK_CUR, SEEK_END

' FILE *tmpfile (void)
' Create a temporary file and open it read/write.
Private Extern tmpfile() As Pointer

' size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *stream)
' Write chunks of generic data to STREAM.
Private Extern fwrite(ptr As String, size As Integer, nmemb As Integer, filestream As Pointer) As Integer
   
' int fseek(FILE *stream, long offset, int whence)
' Seek to a certain position on STREAM.
Private Extern fseek(streamp As Pointer, offset As Long, whence As Integer) As Integer

' size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
' Read chunks of generic data from STREAM.
Private Extern fread(ptr As Pointer, size As Integer, nmemb As Integer, streamp As Pointer) As Integer
  
' int fclose (FILE *__stream)
' Close STREAM.
Private Extern fclose(__stream As Pointer) As Integer


 Public Sub Main()
 
 Dim p, ris As Pointer
 Dim s As string
 Dim i As Integer
 
 s = "Testo qualsiasi"
 i = Len(s)
  
 p = tmpfile()
 If p == 0 Then Error.Raise("Impossibile creare il file temporaneo !")
  
' Scriviamo il contenuto della stringa "s" nel Puntatore "p" creato.
 fwrite(s, i, 1, p)
  
' E' necessario tornare all'inizio dell'area puntata dal Puntatore "p":
 fseek(p, 0, SEEK_SET)
  
' Leggiamo i dati dal Puntatore "p" creato e li scriviamo nel Puntatore "ris":
 ris = Alloc(SizeOf(gb.Byte), i)
 fread(ris, i, 1, p)
  
' Leggiamo la stringa:
 Print String@(ris)   
  
' Liberiamo la memoria precedentemente occupata:
 Free(ris)
 fclose(p)
  
End


Riferimenti