On 27/10/2014 17:12, Antonio Galea <antonio.galea@xxxxxxxxx> wrote:
Il fatto che tu abbia trovato problemi solo su mv e non su cp è un puro caso. Su Linux mv è implementata come una copy(src,dest) seguita da rm(src). Questo è il mv di coreutils per Debian Wheezy (il pacchetto upstream è quello di GNU e viene usato praticamente ovunque): http://sources.debian.net/src/coreutils/8.13-3.5/src/mv.c/#L161
O hai bevuto tu, o ha bevuto (tanto) chi ha architettato una cosa del genere! :D
Sullo stesso filesystem, lo spostamento avviene sicuramente con rename() che tra l'altro è atomica. Ci sono milioni di applicazioni che dipendono da questo per fare varie cose in modo efficiente e sicuro. Immagina quali sarebbero le prestazioni spostando un file sostanzioso con copia + cancellazione, specie su un disco tradizionale con la testina che saltella di qua e di là per spostare byte. E poi, per fare un'operazione del genere avresti bisogno di spazio libero per due copie del file.
Guarda questa riga:bool ok = copy (source, dest, false, x, ©_into_self, &rename_succeeded);
Vedi quel flag 'rename_succeeded'? Non sono andato a cercare i sorgenti della funzione copy() perché non è nel file che hai linkato (e non è una funzione di sistema, mentre rename() sì), ma sono assolutamente sicuro che provi a fare rename(source, dest) e solo se quest'ultima fallisce con l'errore EXDEV si mette a fare una copia byte per byte.
-- Ciao, Flavio -- Per iscriversi (o disiscriversi), basta spedire un messaggio con OGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx