Bene, ho appena provato il tuo programma e ho un'idea di cosa non va.
Fondamentalmente, funziona, ma con un problema tecnico. Quando scrivi per la prima volta "la tua caduta" nel file, usi un char
matrice di 4096
byte e scrivi l'intero array nel file. Il che significa che stai scrivendo "la tua caduta" seguito da 4088
caratteri di nulla casuale. Successivamente, quando aggiungi, stai aggiungendo dalla 4097a posizione in poi. Questo probabilmente non è quello che intendevi fare.
Se semplicemente cat
il file che crei, vedrai l'output previsto "la tua caduta, amico". Ma quando lo leggi interamente nel tuo codice, stai solo leggendo 4096
personaggi. Quindi, la parte ", dude" non viene mai letta, motivo per cui il tuo programma non la emette mai.
La mia soluzione, è necessario modificare la dimensione dell'array. E durante la lettura, leggi in blocchi di diciamo 100 o 1000, finché non premi EOF (read
restituirà -1).
Il numero di byte che stai tentando di scrivere non è corretto,
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l'};
size_t n = sizeof(buf);
if(write (fd, buf, n) < 0){
invece dovresti farlo
char buf[BUFFSIZE] = {'t', 'h', 'y', ' ', 'f', 'a', 'l', 'l', '\0'};
size_t n = strlen(buf); //use strlen
if(write (fd, buf, n) < 0){
Allo stesso modo, fallo anche per altre scritture e letture. Se non stai scrivendo '\0'
nel file per terminare la stringa, non lo otterrai quando leggi i dati dal file.
Durante la lettura dovresti provare fino a quando non viene letto l'intero file, ad es. ottieni EOF
.
C'è solo un piccolo errore, devi cambiare sizeof
funzione a strlen
perché il sizeof
funzione restituirà la dimensione dell'array ma il strlen
funzione restituisce semplicemente la lunghezza della stringa memorizzata nell'array!