Differenze tra le versioni di "Tmpfile ()"
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 3: | Riga 3: | ||
crea un file temporaneo e lo apre in modalità binaria contemporaneamente in lettura ed in scrittura. | crea un file temporaneo e lo apre in modalità binaria contemporaneamente in lettura ed in scrittura. | ||
− | La funzione | + | 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" | ||
Riga 36: | Riga 34: | ||
− | + | Public Sub Main() | |
− | Dim p As Pointer | + | Dim p, ris As Pointer |
Dim s As string | Dim s As string | ||
Dim i As Integer | Dim i As Integer | ||
− | + | 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> | <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> | <FONT Color=gray>' ''E' necessario tornare all'inizio dell'area puntata dal Puntatore "p":''</font> | ||
− | + | fseek(p, 0, SEEK_SET) | |
<FONT Color=gray>' ''Leggiamo i dati dal Puntatore "p" creato e li scriviamo nel Puntatore "ris":''</font> | <FONT Color=gray>' ''Leggiamo i dati dal Puntatore "p" creato e li scriviamo nel Puntatore "ris":''</font> | ||
− | + | ris = Alloc(SizeOf(gb.Byte), i) | |
− | + | fread(ris, i, 1, p) | |
<FONT Color=gray>' ''Leggiamo la stringa:''</font> | <FONT Color=gray>' ''Leggiamo la stringa:''</font> | ||
− | + | Print String@(ris) | |
<FONT Color=gray>' ''Liberiamo la memoria precedentemente occupata:''</font> | <FONT Color=gray>' ''Liberiamo la memoria precedentemente occupata:''</font> | ||
− | + | Free(ris) | |
− | + | fclose(p) | |
− | + | End | |
− | |||
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