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:
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;
}
Il codice non l'ho provato perche non sono sotto linux.