Pagina 1 di 1
effettuare la scansione di un text file in C
Inviato: ven 3 ott 2008, 15:13
da dark0s
Ciao a tutti, mho un problema serio riguardo la programmazione in linguaggio C.
Devo effettuare la scansione di un file di testo, ad esempio un file del tipo:
#Begin configuration file
OPTION1=...
OPTION2=...
#End configuration file
Devo leggere i valori delle variabili OPTION, ma devo effettuare tutto questo in linguaggio C.
Qualcuno sa darmi qualche dritta? Le provate tutte..., uso l'interfaccia standard ANSI C degli stream, ma non riesco a leggere neppure un rigo.
Grazie, e ciao
Re: effettuare la scansione di un text file in C
Inviato: ven 3 ott 2008, 16:36
da Blizzard
ciao,
perchè non posti il codice che hai scritto e vediamo di capire il perchè non funziona???
se poi vuoi qualcosa di gia pronto in tavola puoi dare un'occhiata al lettore di config file che ho fatto per una mezza shell che ho sviluppato
http://digilander.libero.it/bohshell/
li uso parecchio POSIX... ma quella parte dovrebbe essere facilmente convertita in ANSI
Gio
Re: effettuare la scansione di un text file in C
Inviato: ven 3 ott 2008, 16:40
da Blizzard
Re: effettuare la scansione di un text file in C
Inviato: ven 3 ott 2008, 17:38
da dark0s
Il mio prototipo per ora è il seguente:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]) {
int fd, d;
size_t lsize;
FILE* conf_file;
char * line = NULL;
if (argc == 1) {
printf("\nCommand syntax:\n");
printf("\n\tprogramd [ start | stop ]\n");
printf("\t\tstart: start daemon\n");
printf("\t\tstop: stop daemon\n");
}
else if (strcmp(argv[1], "start") == 0) {
conf_file = fopen("/etc/program/program.conf", "r");
if (conf_file == NULL) perror("File not open");
while (!feof(conf_file)) {
d = getline(line, lsize, "/etc/program/program.conf");
printf("%d\n", d);
printf("%s\n", line);
}
}
return(0);
}
Compilazione ed esecuzione vanno nel modo seguente:
bash-3.1# gcc programd.c -o programd
bash-3.1# ./programd
Command syntax:
programd [ start | stop ]
start: start daemon
stop: stop daemon
bash-3.1# ./programd start
-1
Segmentation fault
bash-3.1#
mentre il file di configurazione è il seguente:
# Begin configuration file
OPT=/etc/myprogram/myprogram.log
OPT=/etc/myprogram/myprogram.lock
# End configuration file
Re: effettuare la scansione di un text file in C
Inviato: ven 3 ott 2008, 18:06
da Blizzard
scusa ma hai fatto un po un casino
Codice: Seleziona tutto
conf_file = fopen("program.conf", "r");
if (conf_file == NULL) perror("File not open");
while (d = getline(&line, &lsize, conf_file)!=-1) {
printf("%d\n", d);
printf("%s", line);
free(line);
line=NULL;
}
fclose(conf_file);
man getline per vedere dove avevi incasinato nel chiamare la funzione... a partire dai puntatori sino allo stream del file
Gio
edit: ho cambiato il path del file per provarlo... rimetti il tuo
Ariedit:
1. CHIUDI I FILEEEEES!!!!!
2. un puntatore lo hai dichiarato type * var; un'altro type* var;
il modo generalmente migliore è type *var;

3. occhio a quando faccio la free e assegnamento NULL di line. È abbastanza importante
Re: effettuare la scansione di un text file in C
Inviato: ven 3 ott 2008, 18:48
da targzeta
dark0s ha scritto:...d = getline(line, lsize, "/etc/program/program.conf");...
Dal getline(3), il prototipo della funzione è:
Codice: Seleziona tutto
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
quindi tutti e tre i parametri che gli passi sono sbagliati. I primi due perchè non gli passi dei puntatori, ma semplicemente la copia delle variabili, quindi getline non può lavorarci su. Il terzo perchè non è neanche del tipo richiesto (non che i primi due lo fossero, ma ti eri avvicinato di più

). Prova a compilare con:
generalmente questi errori grossolani li noti al volo così.
Spina