Üzerine yazılmış bir dosyayı okuduğunuzda ne olur?


Yanıtlar:


19

Bu yazarın ne yaptığına bağlı.

Eğer yazar mevcut dosyanın üzerine yazarsa, yazar okuyucuyu soluk bıraktığında, okuyucu yeni içeriği görecektir. Yazar ve okuyucu değişken hızlarda ilerlerse, okuyucu alternatif olarak eski ve yeni içeriği görebilir.

Yazar dosyayı yazmaya başlamadan önce dosyayı kısaltırsa, okuyucu bu noktada dosyanın sonuna karşı çalışacaktır.

Yazar yeni bir dosya oluşturursa, yeni dosyayı eski ada taşırsa, okuyucu eski dosyadan okumaya devam eder. Açık bir dosya taşınır veya kaldırılırsa, dosyayı açan işlemler aynı dosyadan okunmaya devam eder. Dosya kaldırılırsa, son işlem kapanana kadar diskte kalır (ancak tekrar açmanın bir yolu yoktur).

Unix sistemleri zorunlu kilitlere sahip değildir . Bir uygulama, yazıcı bileşeninin ve okuyucu bileşeninin birbirinin ayak parmaklarına basmamasını sağlamak isterse, uygun kilitlemeyi kullanmak geliştiriciye kalmıştır. Çekirdeğin açtığı bir dosyanın kullanıcı uygulamaları tarafından yazmaya karşı korunabileceği birkaç durum vardır, örneğin, döngüsel olarak monte edilmiş bir dosya sistemi görüntüsü veya bazı unix türevlerinde yürütülen bir çalıştırılabilir dosya.


Gilles, açıklaman ftp/ sftpsenaryolarda da geçerli mi? Bir işlemin iletilen ftpdosyayı okumaya başladığını söylerken, aynı dosyanın başka bir sürümü yeni bir iletim nedeniyle dosyanın üzerine yazıyor.
iruvar

@ 1_CR Evet. Bu durumda, yazar ve okuyucu ftpd işlemleridir.
Gilles 'SO- kötülük olmayı'

burada sollama anlamı nedir?
Victor Choy

@VictorChoy Standart anlam: başkasının arkasına / ardında başlamak ve bir noktada önlerinde ilerlemek.
Gilles 'SO- kötü olmak'

18

Klasik bir yarış koşulu, bu nedenle sonuç tanım olarak tahmin edilemez.

Diğerleri arasında, bağlıdır

  • fopen(3)veya open(2)modları yazmak,
  • Yazar çıktısını tamponluyorsa /
  • okuyucunun dosyayı nasıl okuduğu,
  • Okuyucu ve yazar arasındaki hız farkı,
  • Okur ve yazarın başlangıcı arasındaki zaman farkı.
  • Ve elbette, modern çok çekirdekli makinelerde, işler diğer faktörler tarafından daha da karmaşıklaşıyor (örneğin, işlem planlama).

Bir dosyayı, yeniden yazıldığı sırada okuyabilmeniz gerekiyorsa, yazarı dosyanın geçici bir kopyasını çıkartabilir, değiştirebilir ve sonra orijinal dosyaya kopyalayabilirsiniz. Bu şekilde rsyncörneğin, bunu yapar. Bunu uygulamanın çeşitli yolları vardır, ancak ücretsiz öğle yemeği yoktur. Her yöntemin kendi eksiklikleri ve yan etkileri vardır.


1
Bu cevap benimkinden çok daha kapsamlı. Cevabımı silmek
katilist

0

Önceki cevaplayıcıların bundan daha kapsamlı açıklamaları var, ama işte kesinlikle de işe yarayan bir numara, tam olarak istediği şeyi yaparak:

$ tail -f <filename>

Dosyanın sonunu yazıldığı gibi gösterir. Örneğin STDERR'yi bir dosyaya bağlamak, ancak yine de başka bir terminal penceresinde görmek isterseniz kullanışlı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.