PDA

Visualizza la versione completa : [c] fine del file in c


ubuntuunixc
12-10-2008, 10:19
ciao raga
avrei un problema

dovrei leggere un testo finchè non finisce il file

ho provato con questo comando while(!eof(fd))

ma non funziona mi da il seguente errore di compliazione

/tmp/ccId65WE.o: In function `main':
ioex3.c:(.text+0xed): undefined reference to `eof'
collect2: ld returned 1 exit status

ecco la parte di codice

int main(int argc ,char **argv)
{
fd =open(argv[1],O_RDONLY,0777);
{
while(!eof(fd))

oregon
12-10-2008, 11:07
1) Perche' indichi il linguaggio C# se il tuo problema e' per il C ?

2) Non esiste la funzione eof (meglio, c'e' la macro EOF ...) ma devi usare la feof

http://www.cplusplus.com/reference/clibrary/cstdio/feof.html

ubuntuunixc
12-10-2008, 11:26
1) scusa errore di battitura

2) no non va mi va in segmentation fault

io devo leggere il file tutto e scrivere a video i primi 5 caratteri di ogni riga

i problemi sono due
1) leggere finchè il file non finisce
2)una volta letti 5 caratteri deve andare al rigo successivo

posto il codice


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

int fd,i,c;
int tot=0;
int riga=0;
char num[1];
char stringa[50];

int main(int argc ,char **argv)
{
fd =open(argv[1],O_RDONLY,0777);
{
while(!feof(fd))
{
read(fd,stringa,5);
write(1,stringa,5);
}
}
}

oregon
12-10-2008, 11:32
Originariamente inviato da ubuntuunixc
i problemi sono due
1) leggere finchè il file non finisce
2)una volta letti 5 caratteri deve andare al rigo successivo


Non lo avevi detto nel tuo primo post ... e' sempre bene dire tutto quello che si deve fare sin dall'inizio, altrimenti si rischia di perdere tempo ...

Comunque, il tuo file e' di testo o binario?

ubuntuunixc
12-10-2008, 11:57
un file di testo normale
tipo questo con su scritto

ciaociao
html.it
ilforum
firefox

l'output a video deve essere

ciaoc
html.
ilfor
firef

oregon
12-10-2008, 12:18
Allora



char line[100];
FILE *fd;

fd = fopen(argv[1], "r");

while(fgets(line, 100, fd))
printf("%.5s\n", line);

fclose(fd);

ubuntuunixc
12-10-2008, 20:13
grazie per la risposta

però avrei bisogno di un aiutino in più

non voglio usare fgets

come potrei fare? diciamo utilizzando solo read e write?

GRAZIE PER L'AIUTO :-)

oregon
12-10-2008, 20:21
Sai quanto caratteri possano essere lunghe (al massimo) le singole righe?

menphisx
12-10-2008, 22:43
Scusate, c'è qualcosa che non quadra; feof() non prende un file descriptor, ma un puntatore alla struttura FILE; percui, feof(fd) è sbagliato.

:stordita:

menphisx
12-10-2008, 22:53
Comunque, posto una mia versione:


FILE *stream = fopen("file.txt", "r");
int count = 0;

assert(stream != NULL);

while(!feof(stream)){

if(count++ < 5)
putchar(fgetc(stream));
else{

count = 0;
putchar('\n');

while(fgetc(stream) != '\n')
;

}

}

Loading