Bir dosyaya ne zaman yapmak gerekiyor?
Bunu yapmam, çünkü File.Close'a çağrı yapıyorum ve bunun otomatik olarak temizlendiğini düşünüyorum, değil mi?Go bir dosya ne zaman temizlenir?
cevap
Os.File öğesinin bir .Flush() olmadığı, çünkü arabelleğe alınmadığı için bir tanesine ihtiyaç duymadığını fark edersiniz. Yazmak için dosyaya yazmak için doğrudan syscalls yazıyor.
Programınız çıktığı zaman (kilitlense bile) açık olduğu tüm dosyalar işletim sistemi tarafından otomatik olarak kapatılır ve dosya sistemi değişiklik yaptığınızda diske yazılır (bazen birkaç dakika sonra) programınız çıkar.
os.File.Sync() çağrısı, dosya sistemini arabelleklerini diske akıtmaya zorlayacak fsync() syscall öğesini çağırır. Bu, sisteminiz kapalı veya işletim sistemi çökerse bile verilerinizin diskte ve kalıcı olduğunu garanti edecektir.
Sen .Sync aramaya gerek yok()
Bu cevap, fsync'i "fflush" ile karıştırır. Engellenmemiş bir dosyanın _flush_ olması gerekmez. Bu, yazının diske bağlı olduğunu garanti ederseniz, _sync_ 'e ihtiyacınız olmadığı anlamına gelmez. Piotr Praszmo'nun cevabı daha iyi. –
Veri bütünlüğünü olabildiğince sağlamak istediğinizde. Örneğin, programınız dosya kapatılmadan önce çökerse ne olur?
Bkz. here. File.Sync()
, fsync numaralı syscall'tır. Bu isimde daha fazlasını bulabilmelisiniz.
fsync
'un fflush ile aynı olmadığını ve kapatılmadan önce yürütülmediğini unutmayın.
Genelde aramanıza gerek yoktur. Dosya, bir süre sonra ve bu süre içinde elektrik kesintisi olmaması durumunda yine de diske yazılacaktır.
"Genelde aramanıza gerek yoktur" Yalnızca, herhangi birinin, herhangi bir zamanda güç kaynağınızı kesmeye karar verebileceği yerleşik aygıtta çalışmadığınızda doğrudur. – Joppe
Sorun yalnızca yerleşik aygıtlarla sınırlı değil. Her zaman bir senkronize olmayan yazımların bir dosya sisteminin bellek içi arabelleği ile birlikte ölme riski vardır, ancak modern günlük dosya sistemlerinde bu pencere ufukta küçüktür. Bazı pil destekli donanımlar tutarlılığı daha da artırabilir. 'sync', programı temeldeki depolama alanının güncel olduğundan daha fazla haberdar etmenin yoludur. –
burada en tavsiyeler) (fsync aramamamı için vardır görünüyor ama genel olarak esas uygulamanız ihtiyacına bağlıdır. Okuma/yazma kritik dosya üzerinde çalışıyorsanız, her zaman fsync() işlevini çağırmanız önerilir.
http://www.microhowto.info/howto/atomically_rewrite_the_content_of_a_file.html#idp31936
bağlantı file.Sync() yardımcı olacağı durumlarda ilgili daha fazla ayrıntı vardır.
- 1. Bildirimim temizle düğmesiyle ne zaman temizlenir?
- 2. Go, goroutines arasındaki bağlamın ne zaman değiştirileceğine nasıl karar veriyor?
- 3. go install her zaman GOPATH
- 4. Linux'ta dosya açtığımda O_CLOEXEC'i ne zaman kullanmalıyım?
- 5. Bir kullanıcı ne zaman ve ne zaman bir Facebook paylaştı
- 6. Bir kullanıcı ne zaman php
- 7. Go
- 8. Go
- 9. Perl'deki dosya modu ne zaman açık bir argüman haline geldi?
- 10. Cgo'ya bir dosya derlememesini nasıl söyleyebilirim? Düzenli go dosyası için
- 11. "go install./..." ifadesindeki "./..." ifadesi ne anlama geliyor?
- 12. Send_file ile kullanılan geçici dosya nasıl temizlenir?
- 13. Ne zaman görev sayısı
- 14. Go
- 15. Go
- 16. GO
- 17. GO
- 18. Bir initform ne zaman kullanılır?
- 19. İletki, ne zaman bir tıklama()
- 20. Bir UNIX dizini zaman damgasını değiştirdiğinde ne zaman
- 21. Tam olarak ne zaman runtime.Gosched yapar?
- 22. Bir UIWebView Nasıl Temizlenir
- 23. Bir dizi nasıl temizlenir
- 24. Bir DatePicker nasıl temizlenir
- 25. Bir Dinleme sunucusunu Go
- 26. Python test paketi dosya kapsamım ne zaman% 100 olmayacaktı?
- 27. `line` seq` ile` line` seq ', dosya ne zaman kapatılır?
- 28. dosya uzantısı .kt? Bu ne biçim bir dosya?
- 29. Go: Bir üretici, birçok tüketici
- 30. Bir event.target.value ne zaman bir string değil?
Neden birisi bunu kapatmak istiyor? Bir yorum lütfen? –
Bunu düşündüğünüz nedir .Close(), baytları otomatik olarak depoya akıtır? [Kapat için kaynak bunu göstermiyor gibi görünüyor] (https://golang.org/src/os/file_unix.go?s=5591:5619#L179) - Bir şey eksik miyim? –