Sto lavorando a uno strumento di sincronizzazione file basato su Perl. Scarica i file in una directory temporanea (che è garantita per essere sullo stesso file system del file reale) e quindi sposta i file temporanei in posizione su quelli vecchi, preservando i metadati come autorizzazioni, proprietà e ACL. Mi chiedo come raggiungere l'ultimo passaggio su Linux.Il file atomico salva su Linux senza perdere i metadati
Su Mac OS X, almeno in C, vorrei utilizzare la funzione . Questo prende due nomi di file come argomenti e scambia i loro contenuti, lasciando intatti tutti i metadati (oltre a mtime). Garantisce che l'operazione sia atomica: tutti i lettori vedranno il vecchio file o il nuovo, mai qualcosa nel mezzo. Sfortunatamente, non penso sia disponibile su Linux.
So che rename
si muove atomicamente, ma non conserva i metadati. D'altra parte, potrei aprire il file e sovrascrivere i dati con il contenuto di quello nuovo, che conserverebbe tutti i metadati ma non sarebbe un'operazione atomica. Qualche suggerimento su come affrontare questo problema?
Che tipo di metadati stai lavorando così duramente per preservare? Tutto quello che c'è in Unix è proprietario/gruppo e permessi per proprietario/gruppo/tutti. Questo cambia così tanto che sarebbe un problema per te? –
Molti file system Linux supportano anche attributi e ACL estesi e un utente non privilegiato potrebbe non disporre delle autorizzazioni necessarie per modificare l'utente e il gruppo del file temporaneo in quello precedente. Fondamentalmente, c'è un sacco di sottigliezze coinvolte qui, e mi chiedo se qualcosa già esiste per gestirlo. –