Newsgroup: it.comp.lang.c
Titolo: Come si dice a un file "tu qui finisci"?

Devo inserire a un certo punto in un file EOF, ma non so come fare.
fputc(EOF,fp) per esempio,non funziona
Una volta che ho scritto ciň che mi serve, voglio che ciň che si trova
dopo l'ultimo carattere che ho inserito venga spazzato via. Si puň
inserire un EOF ?
 
Non vorrei essere costretto a creare un file da 0, in cui scrivere ciň
che mi serve, cancellare quello col nome desiderato e rinominare il
primo nel secondo: sarebbe troppo brutto come codice.
 
Grazie per l'aiuto,
Riccardo

Mi è stato suggerito da "test" sotto it.comp.os.linux.development di
utilizzare ftruncate, e funziona perfettamente.
Ciao,
Riccardo

utilizzare ftruncate, e funziona perfettamente.
Ciao.
Anche io ho un problema simile. e vorrei saperne di piu' su eof e
ftruncate, non e' che mi puoi dare una mano?
^_^;;
ciao
s.

 s.
Potevi cercare di essere un po' più specifico.
int ftruncate(int fd, off_t length);
tronca il file aperto in scrittura indirizzato da fd (che è un file 
descriptor, non uno stream) dopo length posizioni a partire dalla prima.
Dato che quando usi fopen ti viene ritornato il file stream, e per
troncare ti serve il file descriptor, puoi utilizzare
int fileno(FILE *stream);
che ritorna il file descriptor dopo aver ricevuto come parametro lo
stream.
es°
FILE *fp;
fp=fopen("pippo.txt","w+");	/*apro il file in scrittura*/
ftruncate(fileno(fp),40);	/*dopo 40 caratteri, piazzo EOF, troncando*/
Spero sia abbastanza chiaro.
Ciao,
Riccardo

Spero sia abbastanza chiaro.
si si questo adesso e' appurato, ma un altra cosa...
ora cerco di essere abbastanza preciso:
come si fa a leggere il file fino ad eof? io non  uso (usavo?) gli
stream e come comandi conosco soltanto open/close/read/write e
vogliono cmq un numero di byte da leggere... almeno che non mi sbagli.
cmq il mio problema globale e' questo. 
Devo aprire un file di cui non so la dimensione. controllare riga per
riga se e' presente una stringa, e se non e' presente inserirla alla
fine del file. poi ho anche da svolgere una specie di processo
inverso: trovare una stringa sempre nello stesso file eliminarla, e
spostare eventualmente tutte le succesive sopra, per non fare apparire
spazi bianchi.
Avevo pensato di fare questo perche' poi mi andrebbero ad interrompere
il ciclo di controllo (avevo fatto che l'uscita dal ciclo di controllo
avveniva quando due stringhe successive erano \n)
ma se posso usare un controllo univoco con eof non potrei anche
lasciare gli spazi, giusto?
ciao
e grazie ancora
s.

 lasciare gli spazi, giusto?
mmm
ipotizziamo che tu prenda le righe sino a che non raggiungi EOF
inizi a scansire il file utilizzando fgets
a un certo punto, causa precedente operazione su file ti trovi davanti due
\n
fgets prende la stringa fino al primo \n, ok
quindi trova subito \n e ti restituisce in pratica il carattere '\0' (lui
legge fino al raggiungimento di \n e ti restituisce una stringa con \0 al
posto di \n)
e questa "stringa" anomala potrebbe causarti problemi a seconda di ciò che 
te ne fai.
forse ti converrebbe nel precedente caso usare fgetc e leggere sempre sino
al raggiungimento di \n o EOF, tralasciando gli \n
ehm,
capito?
Ciao,
Riccardo