Qual è la modalità append in un file aperto?
Ci sono due modi di vedere i file. Uno è come un insieme di blocchi di informazioni, che puoi leggere e accedere in qualsiasi ordine.
L'altro è come un flusso di byte. Quando si legge, si inizia dall'inizio, e mentre si legge, si fa avanzare un contatore di posizione del file per ogni byte letto.
In scrittura, è simile. Mentre si scrive, la memoria del file viene allocata (come per l'accesso casuale). Ogni byte scritto viene contato in un puntatore di posizione del file. Alla chiusura del file, questo diventa la lunghezza del byte del file.
Quindi cosa succede se si scrive un file, lo si chiude e poi lo si riapre per scrivere?
Possiamo ricominciare da 0 e sovrascrivere il contenuto esistente.
Oppure possiamo iniziare dalla fine, inizializzando la posizione del nostro file alla lunghezza di ciò che è già stato scritto, e aggiungere lì il nostro nuovo contenuto. Questa è la modalità APPEND.
Il nuovo contenuto viene aggiunto al vecchio.
Ecco un dettaglio che in realtà non vi riguarda, ma vi aiuterà a visualizzare come funziona.
Siccome la memoria sottostante è allocata in blocchi di una certa dimensione, piuttosto che byte per byte, c'è qualche meccanismo aggiuntivo coinvolto. Quando si scrive, quando i blocchi vengono archiviati, vengono scritti su disco, con l'ultimo che viene scritto in chiusura.
Quando si inizia ad aggiungere, si deve leggere quell'ultimo blocco parziale, e iniziare a riempirlo da dove si è lasciato. La lunghezza in byte del file è tutta l'informazione di cui hai bisogno per calcolarla.
Una volta fatto questo, si procede esattamente come qualsiasi altra operazione di scrittura; i blocchi vengono scritti quando vengono riempiti. La modalità APPEND influenza solo l'impostazione iniziale di dove iniziare a scrivere.
La maggior parte dei filesystem che supportano la modalità stream permette anche di cambiare direttamente la posizione del file che si sta leggendo o scrivendo, con operazioni che permettono di modificare la posizione del file per le operazioni successive.
Questo rompe l'astrazione di un puro flusso di byte, dando un accesso casuale al file. Ma è possibile impostare la posizione del file, e leggere una parte specifica di un file, o sovrascrivere una parte specifica di un file.
Questo illustra come l'intera visione "flusso di byte" di un file è in realtà uno strato in cima al modello di archiviazione a blocchi.
Quindi se si vuole modificare un file ad accesso casuale? Forse modificare i primi 100 byte?
Aprirlo con la modalità APPEND. La posizione iniziale del file non è importante in questo caso; ciò che è importante è che non si scarti il contenuto originale del file e si inizi da capo. L'apertura con la modalità OVERWRITE vi darà un file vuoto da cui partire.
Articoli simili
- Dovrei prenderla sul personale se la mia cotta mi lascia su "aperto" su Snapchat? Ci scambiamo Snapchat e poi dopo un po' mi lascia su "aperto".
- Perché ottengo "numpy.ndarray object has no attribute append error"?
- Linux: C'è un modo per impedire la 'cancellazione'/'rinomina' di un file aperto?
- Come cancellare un file aperto in una shell infrastructure host