Bir dosyada çalıştırılan kodun kilitlenmesi gerekip gerekmediği bir tasarım kararı ise ve MS pratikte açık avantajları olduğu için kilitlemeye karar vermişse: Bu şekilde hangi kodun hangi sürümde hangi uygulama tarafından kullanıldığını bilmenize gerek kalmaz. Bu, çoğu insan tarafından basitçe göz ardı edilen Linux varsayılan davranışıyla ilgili büyük bir sorundur. Sistem çapında kütüphaneler değiştirilirse, hangi uygulamaların bu tür kütüphanelerin kodunu kullandığını kolayca bilemezsiniz, çoğu zaman elde edebileceğiniz en iyi şey, paket yöneticisinin bu kütüphanelerin bazı kullanıcılarını tanıyıp yeniden başlatmasıdır. Ancak bu yalnızca genel olarak işe yarar ve Postgres ve libs gibi şeyleri iyi bilir. Daha ilginç senaryolar, bazı üçüncü taraf kitaplara karşı kendi uygulamanızı geliştirmeniz ve bunların değiştirilmesidir, çünkü çoğu zaman paket yöneticisi uygulamanızı bilmiyordur. Ve şu' Sadece yerel C kodu veya benzeri bir sorun değil, hemen hemen her şeyde olabilir: Sadece httpd'yi mod_perl ile kullanın ve bir paket yöneticisi kullanarak yüklenen bazı Perl kitaplıkları ve paket yöneticisinin herhangi bir nedenle bu Perl kitaplıklarını güncellemesine izin verin. Bağımlılıkları bilmediği için httpd'nizi yeniden başlatmaz. Bunun gibi pek çok örnek var, çünkü herhangi bir dosya herhangi bir çalışma zamanı tarafından bellekte kullanımda olan kod içerebilir, Java, Python ve benzeri şeyleri düşünün.
Bu nedenle, dosyaları varsayılan olarak kilitlemenin iyi bir seçim olabileceği fikrine sahip olmak için iyi bir neden var. Yine de bu nedenlere katılmanıza gerek yok.
Peki MS ne yaptı? Basitçe, çağıran uygulamaya dosyaların kilitlenip kilitlenmeyeceğine karar verme şansı veren bir API oluşturdular, ancak bu API'nin varsayılan değerinin ilk çağıran uygulamaya özel bir kilit sağlamak olduğuna karar verdiler. CreateFile ve dwShareMode
argümanının etrafındaki API'ye bir göz atın . Bazı uygulamalar tarafından kullanılan dosyaları silememenizin nedeni budur, kullanım durumunuzu umursamaz, varsayılan değerleri kullanır ve bu nedenle Windows tarafından bir dosya için özel bir kilit alır.
Lütfen insanların size Windows hakkında HANDLE'larda ref saymayı kullanmadığını veya Sabit Bağlantıları desteklemediğini söyleyenlere inanmayın, bu tamamen yanlış. HANDLEs kullanan hemen hemen her API, ref sayma ile ilgili davranışını belgeler ve NTFS ile ilgili hemen hemen tüm makalelerde, belgede Hardlink'leri desteklediğini ve her zaman desteklediğini kolayca okuyabilirsiniz. Windows Vista'dan beri Symlinks desteği vardır ve Hardlinks Desteği, belirli bir dosya vb. İçin hepsini okumak için API'ler sağlayarak iyileştirilmiştir .
Ayrıca, sadece örneğin bir dosyayı tanımlamak için kullanılan yapıların bir göz atmak istersin ext4 kıyaslandığında NTFS ortak noktamız var ki. Her ikisi de verileri dosya adı gibi özniteliklerden ayıran kapsam kavramıyla çalışır ve inode'lar daha eski, ancak buna benzer bir kavram için hemen hemen başka bir addır. Wikipedia bile makalesinde her iki dosya sistemini de listeliyor .
Ağdaki diğer işletim sistemlerine kıyasla Windows'ta dosya kilitlemede gerçekten çok fazla FUD var, tıpkı birleştirme gibi. Bu FUD'nin bir kısmı Wikipedia'da biraz okunarak çıkarılabilir .