if (read(fd, char_letto, sizeof(char) == -1))
è errato , dovrebbe essere
if (read(fd, char_letto, sizeof(char)) == -1)
attento alla parentsi...
Inoltre la read legge solo un carattere, non appende un termnatore di stringa al carattere letto.
Quindi il while
while (strcmp (char_letto, "\n") != 0)
dovresti trasformarlo in
while (char_letto != '\n')
Inoltre devi fermarti quando hai raggiunto la fine del file; quindi devi teenrti in una variabile il numero di byte letti restituito dalla read; l'altro errore è che non ti allochi la stringa, inoltre char_letto non è necessario che sia un puntatore a un char, puo esere un semplice char e poi passi alla read il puntore alla variabile:
Il codice non l'ho provato perche non sono sotto linux.codice:char* leggiLinea(int fd){ //alloco un buffer per contenere stringhe di al massimo //255 caratteri char* stringa = (char *)malloc(256 * sizeof(char)); char char_letto = '\0'; //invoco la read passando il puntatore al carattere int bytes_letti = read(fd, &char_letto, sizeof(char)); //se c'è errore nella lettura if(bytes_letti == -1) return NULL; int posizione_corrente = 0; //continuo a leggere finchè non trovo il carattere di //fine linea o finchè non raggiungo la fine del file while((char_letto != '\n') && (bytes_letti > 0)){ //metto il carattere letto nella stringa stringa[posizione_corrente] = char_letto; posizione_corrente++; bytes_letti = read(fd, &char_letto, sizeof(char)); } //se c'è stato errore ritorno null if(bytes_letti == -1){ //istruzione per deallocare stringa free(stringa); return null; } //aggiungo il terminatore di fine stringa stringa[posizione_corrente] = '\0'; return stringa; }

Rispondi quotando