Autore Topic: [C] Come calcolare il parametro "offset" della funzione fseek() ?  (Letto 651 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.305
  • Ne mors quidem nos iunget
    • Mostra profilo
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline splugenbrau

  • Grande Gambero
  • ***
  • Post: 205
    • Mostra profilo
Re:[C] Come calcolare il parametro "offset" della funzione fseek() ?
« Risposta #1 il: 16 Gennaio 2019, 08:13:53 »
int fd;   // valore restituito dalla funzione:
          // fd=open("miofile",O_RDWR,0660);
long n;   // spostarsi di n bytes a partire dal "mode"
          // (io utilizzo sempre 0)
int mode; // valori possibili:
                // SEEK_SET=0 SEEK_CUR=1 SEEK_END=2


Codice: [Seleziona]
offset = lseek(fd, n, mode);

dove fd è il file descriptor sul quale si desidera muovere il puntatore,
n rappresenta il numero di byte di spostamento a partire dal mode.
Se n è negativo lo spostamento del puntatore avviene all’indietro invece che in avanti.

Il parametro mode indica a partire da quale posizione iniziare a muovere il puntatore:
se mode vale 0 significa che ci si deve muovere a partire dall’inizio del file,
Se vale 1 a partire dalla posizione corrente
e infine se vale 2 a partire dalla fine.

Il valore di ritorno della lseek contiene la posizione corrente del puntatore
dopo lo spostamento.
Allora:


Codice: [Seleziona]
whereamI=    lseek(fd,0,SEEK_CUR);        // restituisce la posizione corrente
myfilelength=lseek(fd,0,SEEK_END);        // restituisce la dimensione del file in byte
i=67;        lseek(fd,i,SEEK_SET);        // posiziona il cursore al sessantottesimo byte (si conta dallo 0)

Ultimamente, col passaggio a 64 bits la funzione è stata rimpiazzata
da lseek64:


https://linux.die.net/man/3/lseek64
« Ultima modifica: 18 Gennaio 2019, 14:06:40 da splugenbrau »