GNU/Linux >> Linux Esercitazione >  >> Linux

Come aggiungere al file in C, utilizzando Apri in modalità O_APPEND su Linux?

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!


Linux
  1. Come aggiungere testo alla fine del file in Linux

  2. Come scrivere testo sull'immagine usando il comando Linux

  3. Come aggiungere facilmente testo alla fine del file in Linux

  4. Come dividere iso o file usando il comando "split" in Linux

  5. Come scrivere un file con C in Linux?

Come condividere file localmente su Linux utilizzando NitroShare

Come creare un collegamento simbolico in Linux usando il comando Ln

Come monitorare le modifiche ai file utilizzando fswatch in Linux

Come aprire un file in Linux

Come scrivere dati in file in Linux

Come modificare il limite di file aperti in Linux