Unix sistemleri ve büyükleri zorunlu kilitlerden kaçınır. Çekirdeğin bir dosyayı kullanıcı programları tarafından yapılan değişikliklere karşı kilitleyeceği, ancak yalnızca başka bir program tarafından yazılmış olması durumunda olmayan birkaç durum vardır. Bir program yazdığı için hiçbir unix sistemi bir dosyayı kilitlemez.
Komut dosyanızın eşzamanlı örneklerinin birbirlerinin ayak parmaklarına basmamalarını istiyorsanız, gibi açık bir kilitleme mekanizması kullanmanız gerekir .flock
lockfile
Eklemek üzere bir dosya açtığınızda, bu >>
, her programın her zaman dosyanın sonuna yazacağını garanti eder. Böylece çoklu örneklerin çıktısı asla birbirinin üzerine yazmaz ve sırayla yazarlarsa çıktıları yazılanlarla aynı sırada kalır.
Olabilecek en kötü şey, örneklerden birinin birkaç çıktı parçası yazması ve bir araya gelmelerini beklemesidir. Bir örnek tarafından üst üste yazar, diğer örnekler kendi yazılarını yazabilir. Örneğin, 1. örnek yazarsa foo
, 2. örnek yazar hello
ve yalnızca 2. örnek yazarsa bar
, dosya içerecektir foohellobar
.
Bir write
sistem , sistem çağrısı çağırdığında etkin bir şekilde dosyaya yazar . Bir çağrı write
atomiktir: her çağrı, write
diğer programlar tarafından kesilmeyen bir bayt dizisi yazar. Tek bir aramanın ne kadar write
etkili bir şekilde yazacağı konusunda genellikle bir sınırlama vardır : daha büyük boyutlar için, yalnızca verilerin başlangıcı yazılır ve uygulama write
tekrar çağırılmalıdır. Ayrıca, birçok program tamponlama gerçekleştirir: bir hafıza alanında veri toplarlar, sonra bu verileri bir yığın halinde yazarlar. Bazı programlar, çıktı arabelleğini tam bir satır veya diğer anlamlı bir ayrımdan sonra temizler. Bu tür programlarla, çok uzun olmadığı sürece tüm hatların kesintisiz olmasını bekleyebilirsiniz (birkaç kilobayta kadar; bu, işletim sistemine bağlıdır). Program anlamlı noktalarla aynı hizada değil, sadece tampon boyutuna bağlı olarak, bir durumda 4kB, sonra başka bir örnekte 4kB, sonra yine ilk durumda 4kB gibi bir şey görebilirsiniz.