Ftell (): differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
Nessun oggetto della modifica
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
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 41: Riga 40:
   Repeat  
   Repeat  
     fread(pr, SizeOf(gb.Byte), SizeOf(gb.Byte), p)
     fread(pr, SizeOf(gb.Byte), SizeOf(gb.Byte), p)
     Print "\e[0mPosizione del puntatore del file: \e[31m"; <FONT color=#B22222>ftell</font>(p)
     Print "\e[0mPosizione del puntatore del file: \e[31m"; <FONT color=#B22222>ftell</font>(p), "\e[0m - Valore letto: \e[34m"; Hex(Byte@(pr), 2)
    Wait 0.3
   Until <FONT color=#B22222>ftell</font>(p) == d
   Until <FONT color=#B22222>ftell</font>(p) == d
   
   
Riga 50: 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