Diciamo che l'intento è quello di creare un file con un buco grande all'inizio che scriveremo più avanti, su un dispositivo embedded su cui è in esecuzione Linux. Apriamo il file, otteniamo un descrittore di file e chiamiamo lseek
su di esso per cercare una determinata posizione nota. Successivamente, quando vogliamo scrivere su quel file nella posizione cercata, chiamiamo write
su di esso.Scrivi su file senza riempimento zero in Linux
Tuttavia, sul primo scrivere il foro creato dalla ricerca viene riempito a zero e se il foro è abbastanza grande, questa operazione può richiedere del tempo. Nella mia applicazione, non c'è bisogno di questa inizializzazione dello zero, poiché il buco ha una lunghezza esatta e lo riempirò con i miei dati più tardi.
C'è un modo per evitare di avere la prima chiamata write
dopo lo seek
riempire a zero il foro (anche se ciò comporta la modifica del driver del filesystem)? In alternativa, c'è un modo di scrivere su un file prima dell'inizio del file (che si aggiunge alla parte anteriore del file)?
Hai ragione. Nel mio caso, l'esecuzione di 'dd if =/dev/zero di =/mnt/mmc/qualunque bs = 1k seek = 100000' richiede circa 10 secondi e la dimensione del file risultante è 97.7M.Il filesystem è vfat, e sfortunatamente non posso cambiarlo, dal momento che sto operando su una scheda SD, che dovrebbe essere leggibile su più sistemi. –
Sì, nessuno dei file system FAT supporta alcun tipo di archiviazione di file sparse che io conosca. Probabilmente non c'è modo di ottenere esattamente quello che stai chiedendo, ma forse c'è una buona soluzione al problema che stai cercando di risolvere. –
@NebojsaMrmak: dai un'occhiata a questa [altra risposta] (http://stackoverflow.com/a/4396912/865874), HTH. – rodrigo