Bir çocuk çatallandığında ebeveynin dosya tanımlayıcılarını devralır, çocuk dosya tanımlayıcıyı kapatırsa ne olur?
Dosya tanımlayıcının bir kopyasını devralır . Bu nedenle, tanımlayıcıyı çocukta kapatmak, çocuk için kapatır, ancak ebeveyn için değil, tersi de geçerlidir.
Çocuk yazmaya başlarsa, ebeveynin sonunda dosyaya ne olur? Bu tutarsızlıkları, çekirdeği veya kullanıcıyı kim yönetir?
Aynı dosyaya yazılan iki işlemle tam olarak (tam anlamıyla olduğu gibi) aynıdır. Çekirdek, işlemleri bağımsız olarak zamanlar, böylece dosyada araya eklenmiş veriler alırsınız.
Ancak, POSIX (buna * nix sistemlerinin büyük ölçüde veya tamamen uyumlu olduğu), C API'sinden (sistem çağrılarıyla eşlenen) read()
ve write()
işlevlerin, normal dosyalarda çalıştıklarında birbirlerine göre atomik olduklarını [...] veya msgstr "% s: sembolik bağlantılar". GNU C manuel olarak bunu borular açısından da geçici olarak vaat eder ( PIPE_BUF
şartın bir parçası olan varsayılan değerin 64 kilo olduğuna dikkat edin). Bu , sözleşmenin kullanımı echo
veya gibi diğer dillerde / araçlarda yapılan çağrıların cat
söz konusu sözleşmeye dahil edilmesi gerektiği anlamına gelir, bu nedenle iki bağımsız süreç aynı anda "merhaba" ve "dünya" yı aynı anda yazmaya çalışırsa, diğeri ortaya çıkar sonu "helloworld" veya "worldhello" dur ve asla "
belirli bir açık dosyayı dosya tanımlayıcı aracılığıyla kapatmak için bir işlem çağrısı kapatma işlevi. işlemin dosya tablosu referans sayısını bir azaltır. ancak üst ve alt öğelerin her ikisi de aynı dosyayı tuttuğundan (referans sayısı 2'dir ve kapatıldıktan sonra azalır 1) sıfır olmadığı için işlem dosya sorunsuz bir şekilde kullanılmaya devam eder.
Ebeveyn ve çocuk olmak üzere İKİ süreç vardır. Her ikisinde de ortak olan "referans sayısı" yoktur. Bağımsızlar. WRT bunlardan biri bir dosya tanımlayıcıyı kapattığında ne olur, ilk sorunun cevabına bakın.
open()
vefork()
orada arasında bir ayrımdır dosya descript-ya ve dosya descipt-iyon - Eski sonra ifade eder ve bir çatal içinde tanımlayıcılar kopya olmasına rağmen, aynı açıklamaya atıfta bulunurlar. Ancak, test edildiğinde bu, çocuğun kolunun kapatılmasının ebeveynlerin kolunu kapatması anlamına gelmediği açıktır. Her iki tanıtıcı yazarken veri serpiştirmesinde küçük bir fark yaratabileceğini düşünüyorum - ama yine de belirsiz, bu yüzden tam olarak nasıl olduğu çok önemli değil.