Differenze tra le versioni di "Ftell ()"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 2: Riga 2:
 
  long int '''ftell''' (FILE *__stream)
 
  long int '''ftell''' (FILE *__stream)
 
restituisce la posizione corrente del puntatore del file rispetto all'inizio del file medesimo.
 
restituisce la posizione corrente del puntatore del file rispetto all'inizio del file medesimo.
 +
  
 
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 ftell</font>(__stream As Pointer) As Long In "libc:6"
 
  Private <FONT color=#B22222>Extern ftell</font>(__stream As Pointer) As Long In "libc:6"
 
+
Semplice esempio uso in Gambas in combinazione con le funzioni "fwrite()", "fseek()" e "fclose()":
 
 
Semplice esempio uso in Gambas in combinazione con le funzioni ''fwrite()'', ''fseek()'' e ''fclose()'':
 
 
  Library "libc:6"
 
  Library "libc:6"
 
   
 
   
Riga 27: Riga 26:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim p, pr As Pointer
 
   Dim p, pr As Pointer
Riga 33: Riga 32:
 
   Dim d, n, i As Integer
 
   Dim d, n, i As Integer
 
   
 
   
   s = "<FONT Color=gray>''/percorso/del/file/da/leggere''</font>"
+
   s = "<FONT Color=darkgreen>''/percorso/del/file/da/leggere''</font>"
 
   d = Stat(s).Size
 
   d = Stat(s).Size
 
   pr = Alloc(SizeOf(gb.Byte), d)
 
   pr = Alloc(SizeOf(gb.Byte), d)
Riga 51: Riga 50:
 
   pr = 0
 
   pr = 0
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 16:30, 14 giu 2024

La funzione della libreria di C

long int ftell (FILE *__stream)

restituisce la posizione corrente del puntatore del file rispetto all'inizio del file medesimo.


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 ftell(__stream As Pointer) As Long In "libc:6"

Semplice esempio uso in Gambas in combinazione con le funzioni "fwrite()", "fseek()" e "fclose()":

Library "libc:6"

' FILE *fopen (const char *__restrict __filename, const char *__restrict __modes)
' Open a file and create a new stream for it.
Private Extern fopen(__filename As String, __modes As String) As Pointer

' size_t fread(void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream)
' Read chunks of generic data from STREAM.
Private Extern fread(__ptr As Pointer, __size As Long, __n As Long, __stream As Pointer) As Long

' long int ftell (FILE *__stream)
' Return the current position of STREAM.
Private Extern ftell(__stream As Pointer) As Long

' int fclose (FILE *__stream)
' Close STREAM.
Private Extern fclose(__stream As Pointer) As Integer


Public Sub Main()

 Dim p, pr As Pointer
 Dim s As String
 Dim d, n, i As Integer

 s = "/percorso/del/file/da/leggere"
 d = Stat(s).Size
 pr = Alloc(SizeOf(gb.Byte), d)

 p = fopen(s, "r")

 Repeat 
   fread(pr, SizeOf(gb.Byte), SizeOf(gb.Byte), p)
   Print "\e[0mPosizione del puntatore del file: \e[31m"; ftell(p), "\e[0m - Valore letto: \e[34m"; Hex(Byte@(pr), 2)
   Wait 0.3
 Until ftell(p) == d

' Libera la memoria precedentemente allocata:
 fclose(p)
 Free(pr)
' Si assicura che il Puntatore non punti a un indirizzo rilevante di memoria:
 pr = 0

End