Sistemimde (Ubuntu Linux, glibc), bir close
aramasının man sayfası, dönebileceği çeşitli hata döndürme değerlerini belirtir. Ayrıca, close() 'ın dönüş değeri genel olarak geçerli ancak yine de ciddi bir programlama hatası olduğunu kontrol etmediğinden emin değil. Bir posix kapatma çağrısı başarısız olursa ne yapmalı?
ve dönüş değeri sadece teşhis için kullanılması gerektiğini, aynı zamanda
Not at
. Özellikle bir close() bir EINTR'den sonra tekrar denenmemelidir, çünkü bu durum başka bir evreden yeniden kullanılan bir tanımlayıcının kapanmasına neden olabilir. Bu nedenle, dönüş değerini göz ardı etmemeye veya aramayı yeniden denemeye izin verilmemelidir.Verilen bakımdan,
close()
çağrı hatasını nasıl ele alabilirim?Dosyaya bir şey yazarken hata olduysa, veri kaybını önlemek için bilgileri başka bir yere yazmayı denemeliyim.
Sadece dosyayı okuyorsam, başarısızlığı günlüğe kaydedebilir ve hiçbir şey olmamış gibi davranarak programa devam edebilir miyim? Herhangi bir uyarı, dosya tanıtıcı sızıntısı var mı, yoksa başka bir şey var mı?
Düşünce. (http://unix.stackexchange.com/questions/231677/failing-close-system-call) Bazı durumlarda kapatma hataları mantıklıdır (örneğin, hatalı disk senk.). Bazı durumlarda başarısız olur. Aynı fiziksel dosyaya işaret eden veya bir boruyu kapatarak son örneği olmayan çoğaltılmış bir dosya tanıtıcısını kapatmak gibi, çünkü bunlar temel olarak çekirdek hatalarıdır, ancak daha aydınlanmış bir cevabı duymak isterim. – PSkocik
FWIW, Raymond Chen'in bu genel durumu ele alalım: http://blogs.msdn.com/b/oldnewthing/archive/2008/01/07/7011066.aspx –
Ne yaparsanız yapın, * her zaman kullanıcıya bildirin * . Sadece kimsenin bakmadığı bir iç kayıt dosyasına "giriş yapmak" yeterli değildir; Kullanıcının hinky olduğunu öğrenmesini istersiniz. GUI uygulamaları için kalıcı bir iletişim kutusu açabilirim. Komut satırı uygulamaları için standart hataya uyarı yazdım. Hizmetler için günlük dosyası yeterlidir. Bir dosyaya yazdıktan sonra 'close()' hatası oluşursa, dosyaya yazarken bir yazım hatasıyla karşılaşırsam tam olarak aynısını yapardım. –