PDA

View Full Version : [C][SO] Dubbio su current offset


ashtisdale93
25-07-2013, 09:52
Volevo chiedere una piccola informazione riguardo ad un esercizio del mio corso di Sistemi Operativi.

L'esercizio in questione è:

Scrivere un programma in C che prende un input da tastiera e lo scrive nel file FILE1 Successivamente, copiare in ordine inverso il contenuto di FILE1 in un file FILE2 e stampare il contenuto di FILE2 sul terminale.

La soluzione è la seguente:

//ESERCIZIO:
//Prendere un input da tastiera e scaricarlo in FILE1
//Copiare in ordine inverso il contenuto di FILE1 in FILE2
//Infine stampare il contenuto di FILE2 sul terminale
//utilizzando read e write

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{

int fdin, fdout, n;
int c, buf[90];


if((fdin=open("FILE1",O_RDWR|O_CREAT|O_TRUNC,0644))<0) //Crea FILE1
printf("FILE1 open error\n"); //in modalita' read-write

if((fdout=open("FILE2",O_CREAT|O_RDWR|O_TRUNC,0644))<0) //Apre il file
printf("FILE2 open error\n"); //in cui copiare in modalita' read-write

n=read(STDIN_FILENO,buf,90); //leggo da standard input
write(fdin,buf,n); //scrivo su FILE1

n=lseek(fdin,-1,SEEK_END); //mi posiziono alla fine di FILE1


while ( n >= 0) {
read(fdin, &c, 1);
write(fdout, &c, 1);
n=lseek(fdin,-2,SEEK_CUR);
}

lseek(fdout,0,SEEK_SET);

while ( read(fdout, &c, 1) > 0)
write(STDOUT_FILENO, &c, 1);

exit(0);
}


Il mio dubbio è su questa riga:
n=lseek(fdin,-2,SEEK_CUR);
Perchè si fa un offset di -2 e non di -1 se bisogna leggere bit per bit al contrario?

Cait Sith
25-07-2013, 12:29
credo perchè tu con il read di fdin ti posti in avanti di una carattere, quindi se vuoi leggere il carattere precedente a quello che hai appena letto devi tornare indietro di uno (a questo punto rileggeresti lo stesso) più uno (quello che vuoi leggere)

ashtisdale93
25-07-2013, 12:51
Oddio che stupido, è vero!
Grazie infinite! :D