Questa domanda penso sia abbastanza tecnica per S/O, e probabilmente troppo orientata alla programmazione per Android. Sono incuriosito da come i file vengono gestiti in Android (o Java o Linux, a seconda dei casi), dal momento che ho fatto qualcosa con il mio nuovo smartphone e sarei curioso di sapere come è successo.Perché posso spostare correttamente un file in Linux mentre viene scritto?
Stavo trasferendo un file dal mio portatile al mio telefono Android, tramite Bluetooth. Ho visto il nuovo file nel file explorer, supponevo che fosse completamente trasferito, quindi lo ho spostato da /sdcard/bluetooth
a /sdcard/torrents
. Dopo averlo fatto, ho notato che era ancora in fase di trasferimento. Con mia sorpresa, è stato completato con successo, confermato con un'icona di notifica nel telefono e con un controllo MD5 manuale su entrambi i lati. Nella maggior parte dei sistemi, lo spostamento del file avrebbe causato un arresto anomalo.
Qual è il motivo di questo trasferimento riuscito? Sono consapevole del fatto che, in generale, il percorso del file è separato dal percorso del file sul file system (in questo caso, una scheda SD). Immagino che l'app Bluetooth abbia aperto un handle per il file e quando ho spostato il file, una tabella di "file aperti" è stata aggiornata con un nuovo percorso. Questa caratteristica è generalmente vera per qualsiasi sistema Linux? Posso fare un mv
su un file in fase di scrittura e aspettarmi che la copia, nella sua nuova posizione, sia corretta?
file Perché sarebbe in movimento tra i due sistemi di file diversi causano un crash per cominciare? I file stessi sono kludges di dati binari; il file system rappresenta solo il modo in cui il mazzo di dati viene memorizzato, rappresentato e rimosso. – Makoto
Non è prevedibile che lo spostamento di un file in sé non causi un arresto anomalo, ma utilizzando 'mv' su un file _ mentre è ancora in fase di scrittura su_ probabilmente (poiché in generale un sistema che scrive su un file dovrebbe essere in grado di assumere che il file rimane nella stessa posizione dall'apertura di scrittura alla chiusura di scrittura). Sto cercando di capire se quest'ultimo caso è vero per tutti i sistemi Linux (o Java, o Android). Punti extra scout/brownie per chiunque possa spiegare perché questo succede! – halfer