Neden Windows ve Windows X'deki Kullanım Dosyalarını Değiştiremiyorum?
Linux ve OS X kullanıyorsanız, işletim sistemi şu anda kullanımda olan bir dosyayı silmenizi engellemez, ancak Windows'ta bunu yapmaktan kesinlikle men edilirsiniz. Ne verir? Neden Unix kaynaklı sistemlerde kullanımda olan dosyaları düzenleyebiliyor ve silebiliyorsunuz, ancak Windows'ı silemiyorsunuz??
Bugünün Soru ve Cevap oturumu bize topluluk tarafından yönlendirilen bir soru-cevap web sitesi grubu olan Stack Exchange'in bir alt birimi olan SuperUser'ın izniyle geliyor..
Soru
SuperUser okuyucu the.midget, Linux ve Windows'un neden kullanımdaki dosyalara farklı davrandığını bilmek istiyor:
Linux'u kullanmaya başladığımdan beri beni şaşırtan şeylerden biri, bir dosyanın adını değiştirmenize ya da okunurken bile silmenize izin vermesidir. Örnek olarak, bir videoyu oynatırken yanlışlıkla silmeye çalıştım. Başarılı oldum ve şu anda kullanılıyor olsun veya olmasın, bir dosyadaki herhangi bir şeyi hemen hemen değiştirebildiğinizi öğrendiğim için şaşırdım.
Öyleyse, sahne arkasında neler oluyor ve Linux'ta olduğu gibi Windows'taki şeyleri yanlış silmesini engelliyor?
Cevap
SuperUser katkıda bulunanlar, almidget'in durumuna biraz ışık tuttu. Amazed yazıyor:
Windows'ta bir dosyayı açtığınızda veya çalıştırdığınızda, Windows dosyayı yerinde kilitler (bu bir basitleştirmedir, ancak genellikle doğrudur.) Bir işlem tarafından kilitlenen bir dosya bu işlem yayınlanana kadar silinemez. Bu nedenle, ne zaman bir Windows kendisini güncellemek zorunda olursa, etkin olması için yeniden başlatmanız gerekir..
Öte yandan, Linux ve Mac OS X gibi Unix benzeri işletim sistemleri, dosyayı değil, temeldeki disk sektörlerini kilitler. Bu önemsiz bir farklılaşma gibi görünebilir ancak bu, dosyanın dosya sistemi içindekiler tablosundaki kaydının, dosyayı önceden açmış olan herhangi bir programı bozmadan silebileceği anlamına gelir. Böylece, bir dosyayı hala yürütülürken veya başka bir şekilde kullanımdayken silebilirsiniz ve bazı işlemler açık bir tutamağa sahip olduğu sürece diskte var olmaya devam eder;.
David Schwartz fikri genişletti ve işlerin ideal olarak nasıl olması gerektiğini ve pratikte nasıl olması gerektiğini vurguladı:
Windows varsayılan olarak otomatik, zorunlu dosya kilitlemeyi seçer. UNIX varsayılan olarak manuel, işbirlikçi dosya kilitleme özelliğine sahiptir. Her iki durumda da, varsayılanlar geçersiz kılınabilir, ancak her iki durumda da genellikle.
Birçok eski Windows kodu, yerel API (CreateFile gibi) yerine C / C ++ API'sini (fopen gibi işlevler) kullanır. C / C ++ API, zorunlu kilitlemenin nasıl çalışacağını belirlemenize olanak sağlamaz, böylece varsayılan ayarları alırsınız. Varsayılan “paylaşım modu” “çakışan” işlemleri yasaklamaya meyillidir. Yazmak için bir dosya açarsanız, dosyalara hiç yazmamış olsanız bile yazıların çakışacağı varsayılır. Yeni adlar için Aynen.
Ve işte daha da kötüye gittiği yer. Okuma veya yazma için açılış dışında, C / C ++ API dosyası ile ne yapmak istediğinizi belirtmek için bir yol sağlar. Dolayısıyla, API herhangi bir yasal işlem gerçekleştireceğinizi varsaymalıdır. Kilitleme zorunlu olduğundan, kod çakışan işlemi gerçekleştirmeyi amaçlamamış ancak dosyayı başka bir amaç için açmış olsa bile, çakışan bir işleme izin veren bir açık reddedilecektir..
Bu nedenle, kod C / C ++ API'sini kullanıyorsa veya yerel API'yi bu sorunları özellikle düşünmeden kullanıyorsa, açtıkları her dosya için maksimum olası işlem kümesini önler ve mümkün olan her işlem dışında bir dosyayı açamaz açıldığında karışık olabilir.
Bence, her program kendi paylaşım modlarını ve açık modları akıllıca ve akıllıca ele alan arıza durumlarını seçtiyse, Windows yöntemi UNIX yönteminden çok daha iyi sonuç verecektir. Bununla birlikte, UNIX yöntemi, kod bu konular hakkında düşünmeye zahmet etmiyorsa daha iyi çalışır. Ne yazık ki, temel C / C ++ API'si Windows dosya API'si üzerinde paylaşım modlarını idare edecek şekilde çakışmıyor ve çakışıyorsa iyi açılıyor. Yani net sonuç biraz dağınık.
Elinizde: dosya işlemeye iki farklı yaklaşım iki farklı sonuç veriyor.
Açıklamaya eklemek için bir şey var mı? Yorumlarda ses kesiliyor. Diğer teknoloji meraklısı Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Burada tüm tartışma konusuna göz atın.