|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2008
Città: Torino (TO)
Messaggi: 237
|
[C][SO] Dubbio su current offset
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: Codice:
//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);
}
Codice:
n=lseek(fdin,-2,SEEK_CUR);
__________________
Microsoft Windows 10 Pro - Fractal Design Define R2 XL - Enermax Platimax 750W - MSI X99S GAMING 9 AC - Noctua NH-D15 - Intel Core i7-5820k - MSI GTX 970 GAMING 4G - 16 GB RAM Corsair Vengeance LPX DDR4 2400Mhz - Samsung 850 Evo 500GB - ASUS PB728QR - Tastiera Ducky Shine 4 - Mouse Logitech G700s |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2005
Messaggi: 309
|
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)
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2008
Città: Torino (TO)
Messaggi: 237
|
Oddio che stupido, è vero!
Grazie infinite!
__________________
Microsoft Windows 10 Pro - Fractal Design Define R2 XL - Enermax Platimax 750W - MSI X99S GAMING 9 AC - Noctua NH-D15 - Intel Core i7-5820k - MSI GTX 970 GAMING 4G - 16 GB RAM Corsair Vengeance LPX DDR4 2400Mhz - Samsung 850 Evo 500GB - ASUS PB728QR - Tastiera Ducky Shine 4 - Mouse Logitech G700s |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:08.



















