Perl tabanlı bir dosya senkronizasyon aracı üzerinde çalışıyorum. Dosyaları geçici bir dizine (gerçek dosyayla aynı dosya sisteminde olduğu garanti edilir) indirir ve daha sonra geçici dosyaları eski dosyalara yerleştirir, izinler, sahiplik ve ACL'ler gibi meta verileri korur. Linux'ta bu son adıma nasıl ulaşacağımı merak ediyorum.Meta veri kaybı olmadan Linux'ta atomik dosya kaydetme
Mac OS X'te, en azından C'de, exchangedata
işlevini kullanırdım. Bu, iki dosya ismini argüman olarak alır ve içeriklerini değiştirir ve tüm meta verileri (mtime dışında) sağlam bırakır. Operasyonun atomik olmasını garanti eder - tüm okuyucular ya eski dosyayı ya da yenisini görürler, asla aralarında bir şey olmaz. Maalesef, Linux'ta mevcut olduğunu sanmıyorum.
rename
'un atomik olarak hareket ettiğini biliyorum, ancak meta verileri koruyamıyor. Öte yandan, dosyayı açıp, tüm meta verileri koruyacak, ancak bir atomik işlem olmayacak olan, yeni olanın içeriğiyle verilerin üzerine yazabilirim. Bu sorunu çözmek için herhangi bir öneriniz var mı?
Ne tür meta veriler korumak için çok çalışıyorsunuz? Unix'te tüm var sahip/grup ve sahip/grup/herkes için izinler. Bu o kadar değişiyor ki senin için bir sorun olur mu? –
Birçok Linux dosya sistemi, genişletilmiş öznitelikleri ve ACL'leri de destekler ve ayrıcalıklı olmayan bir kullanıcı, geçici dosyanın kullanıcı ve grubunu eskisiyle değiştirmek için gerekli izinlere sahip olmayabilir. Temel olarak, burada çok fazla incelik var, ve bunu halledecek bir şey olup olmadığını merak ediyorum. –