2011-02-04 7 views
5

Linux ya da Mac OS X gibi bir POSIX sistemim varsa, bir yolun salt okunur dosya sisteminde olup olmadığını belirlemenin en iyi ve en taşınabilir yolu nedir? Kafamın üst kapalı 4 yollar geliyor:Bir dosya sisteminin monte edilip edilmediğini belirlemek için en iyi POSIX yolu okunabilir

  • open(2) bir dosya O_WRONLY ile - Sen benzersiz dosya adı ile gelip ve ayrıca O_CREAT ve O_EXCL geçmek gerekir. Başarısız olursa ve EROFS errno'unuz varsa, bunun salt okunur dosya sistemi olduğunu bilirsiniz. Bu, umursamadığınız bir dosyayı oluşturmanın can sıkıcı yan etkisine sahip olurdu, ancak bunu oluşturduktan hemen sonra unlink(2) yapabilirdiniz.

  • statvfs(3) - döndü struct statvfs alanlarında biri f_flag ve bu seçeneklerden biri salt okunur bir dosya sistemi için ST_RDONLY olduğunu. Bununla birlikte, statvfs(3) için özellik, uygulamaların geçerli bilgi içeren alanlardan herhangi birine bağlı olamayacağını açıkça belirtir. Okumak bir dosya sistemi için ST_RDONLY ayarlanmayabilir iyi bir olasılık var gibi görünüyor.

  • access(2) - Eğer bağlama noktası biliyorsanız Bağlama noktasına yazma erişimine sahip olacak bir kullanıcı olarak çalışan olarak, sürece W_OK bayrağıyla access(2) kullanabilirsiniz. Yani ya kötüsünüz ya da UID'nizle bir mount parametresi olarak monte edilmişsiniz. -1 dönüş değeri ve EROFS errno alırsınız.

  • Ayrıştırma /etc/mtab veya /proc/mounts - Taşınabilir görünmüyor. Mac OS X'in bunlardan hiçbiri yok gibi görünüyor. Sistem /etc/mtab olsa bile, alanların OS'ler arasında tutarlı olup olmadığından ya da salt okunur için mount seçenekleri (Linux'ta ro) taşınabilir olmadığından emin değilim.

Eksik olduğum başka yollar var mı? Bir dosya sisteminin salt okunur bir şekilde monte edilip edilmediğini bilmek gerekirse, bunu nasıl yapacaksınız?

+1

Mtab üzerinde, bir dosya sistemi rw'ye bağlanırsa ancak daha sonra devam ederse, mtab güncellenmez./proc/mounts doğru şekilde güncellenir. – Ryaner

cevap

1

Ayrıca popen komut mount ve çıkış dosya sistemi arıyordu ve o metni " (ro," düzenlenen eğer görerek inceleme fırsatı buldular.

Ancak yine de bu taşınabilir değildir.

Benim seçenekim, dosya sisteminin yalnızca okunan okunup takılmadığı konusunda endişelenmemekti. Sadece dosyanızı oluşturmayı deneyin ve başarısız olursa, kullanıcıya hatanın ne olduğunu anlatın. Ve elbette, onlara başka bir yere kaydetme seçeneğini de verin.

Gerçekten de bu tür bir işlemi yapmak zorundasınız, çünkü test ve yapma arasında küçük bir boşluk olduğu herhangi bir senaryoda, durum değişikliklerini (büyük olasılıkla tüm bir dosya sisteminin salt okunur hale getirilmesine kadar) görebilirsiniz. ama kim bilir, belki de buna izin veren bir dosya sistemi vardır (ya da gelecekte olacak). Yazma perma varsa

+0

Genel durumdaki yarış koşulları nedeniyle sadece yazarak katılıyorum; Bu yüzden erişim (2) genellikle önerilmez. Ama benim özel durumumda, FS'nin kendisine salt okunur olarak monte edilip edilmediğine tamamen dayalı bir politika kararı vermem gerekiyor; FS'ye bir dosya yazmayı umursamıyorum. –

+0

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' kullanır ve '' '' '' '' '' '' '' '' '' kullanır. – Willem

2
utime(path, NULL); 

, o size rofs vermek ya olacak - İzin verilirse - basitçe temelde zararsızdır dizinde, üzerinde mtime güncelleyin.

+1

Temel olarak, belki de ... ... artan yedekleme programları için zararsız mı? :-) – paxdiablo

İlgili konular