Differenze tra le versioni di "Fseek ()"

Da Gambas-it.org - Wikipedia.
(Creata pagina con 'La funzione della libreria di C int fseek(FILE *stream, long offset, int whence); posiziona il puntatore all'interno del flusso di dati ad un determinato byte. Il parametro ...')
 
Riga 6: Riga 6:
  
 
Il parametro ''whence'' rappresenta il punto dal quale verrà aggiunto il valore di spostamento definito dal parametro ''offset''. Esso può assumere uno di questi valori:
 
Il parametro ''whence'' rappresenta il punto dal quale verrà aggiunto il valore di spostamento definito dal parametro ''offset''. Esso può assumere uno di questi valori:
SEEK_SET = 0 - Inizio del file;
+
* SEEK_SET = 0 - Inizio del file;
SEEK_CUR = 1 - Corrente posizione del puntatore nel flusso del file;
+
* SEEK_CUR = 1 - Corrente posizione del puntatore nel flusso del file;
SEEK_END = 2 - fine del file.
+
* SEEK_END = 2 - fine del file.
  
 
La posizione effettiva, dalla quale partirà il puntatore del file, è individuata da: ''whence'' + ''offset'' .  
 
La posizione effettiva, dalla quale partirà il puntatore del file, è individuata da: ''whence'' + ''offset'' .  

Versione delle 17:55, 14 set 2014

La funzione della libreria di C

int fseek(FILE *stream, long offset, int whence);

posiziona il puntatore all'interno del flusso di dati ad un determinato byte.

Il parametro offset indica il numero di byte di spostamento del puntatore del flusso dalla posizione del parametro whence.

Il parametro whence rappresenta il punto dal quale verrà aggiunto il valore di spostamento definito dal parametro offset. Esso può assumere uno di questi valori:

  • SEEK_SET = 0 - Inizio del file;
  • SEEK_CUR = 1 - Corrente posizione del puntatore nel flusso del file;
  • SEEK_END = 2 - fine del file.

La posizione effettiva, dalla quale partirà il puntatore del file, è individuata da: whence + offset .


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

Private Extern fseek(filestream As Pointer, offset As Long, whence As Integer) As Integer In "libc:6"


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

Library "libc:6"

Private Const SEEK_SET As Integer = 0

Private Extern fopen(fl As String, mode As String) As Pointer

Private Extern fwrite(ptr As Pointer, size As Integer, nmemb As Integer, filestream As Pointer) As Integer

' int fseek(FILE *stream, long offset, int whence)
Private Extern fseek(filestream As Pointer, offset As Long, whence As Integer) As Integer

Private Extern fread(ptr As Pointer, size As Integer, nmemb As Integer, filestream As Pointer) As Integer

Private Extern fclose(filestream As Pointer) As Integer


Public Sub Main()
 
 Dim p, pw, pr As Pointer
 Dim s As String = "Testo qualsiasi"


' Poiché la variabile contenente i dati da scrivere nel flusso, e la variabile, nella quale si dovranno memorizzare i dati letti dal flusso,
' sono di tipo "Puntatore", allora anche nel codice Gambas si dovranno passare delle variabili di tipo "Puntatore":
  pw = Alloc(s)
  pr = Alloc(len(s))
 
  p = fopen("/tmp/f", "w+")
 
  fwrite(pw, 1, len(s), p)
  
  fseek(p, 0, SEEK_SET)

  fread(pr, 1, len(s), p)
       
  Print String@(pr)
 
  fclose(p)

  free(pw)
  free(pr)

End