Bazı dosya kopyalama programları gibi rsync
ve curl
başarısız transferleri / kopyaları devam ettirme yeteneğine sahiptir.
Bu başarısızlıkların birçok nedeni olabileceğine dikkat çekerek, bazı durumlarda program "temizleme" işlemini yapabilir, bazı durumlarda program yapamaz.
Bu programlar devam ettiğinde, sadece başarılı bir şekilde transfer edilen dosya / verinin boyutunu hesaplıyor gibi görünüyor ve bir sonraki byte'ı kaynaktan okumaya ve dosya parçasına eklenmeye başlıyor.
örneğin, hedefe "yapan" dosya parçasının boyutu 1378 byte'tır, bu nedenle sadece orjinaldeki 1379 byte'tan okumaya başlar ve parçaya eklenir.
Sorum şu ki, baytların bitlerden oluştuğunu ve tüm dosyaların verilerini temiz bayt büyüklüğünde parçalara ayırmadığını bilmek, bu programlar veri eklemek için seçtikleri noktanın doğru olduğunu nasıl biliyorlar?
Hedef dosyayı yazarken, yalnızca temiz, iyi biçimlendirilmiş baytların temel blok aygıtına ulaşmasını sağlamak için programda, çekirdek veya dosya sistemi düzeyinde meydana gelen SQL veritabanlarına benzer bir tür tamponlama veya "işlem" olur.
Veya programlar en son baytın potansiyel olarak eksik olacağını varsayarlar, bu yüzden kötü olduğu varsayımıyla silerler, baytı tekrar kopyalarlar ve oradan eklemeye başlarlar?
Tüm verilerin bayt olarak temsil edilmediğini bilerek, bu tahminler yanlış görünüyor.
Bu programlar "devam ettiğinde" doğru yerden başladığını nereden biliyorlar?
head -c 20480 /dev/zero | strace -e write tee foo >/dev/null
ve ardından işletim sistemi onları tamponlayacak ve daha büyük boyutlarda diske gönderecek.
fwrite()
?