Bellek eşlemeli dosya olarak kullanmak için bir dosya oluşturuyoruz.Herhangi bir tanıtıcı kapatıldıktan sonra CreateFile FILE_FLAG_DELETE_ON_CLOSE başarısız olur
biz dosya başarıyla dosyası oluşturmak FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE
özelliklerini kullanmasına biz FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE
ile pay kullanmak GENERIC_READ | GENERIC_WRITE
ile açın. İstediğimiz gibi aynı bayraklarla tekrar tekrar açabiliriz.
Bir tutamaç kapatıldıktan sonra, artık tutamaçları açamaz, ERROR_ACCESS_DENIED ile döner. Bu tutamaçlardan herhangi birini, ilk olarak CreateFile (ALWAYS_CREATE) veya CreateFile (OPEN_EXISTING) öğelerinden birini kapatarak neden olabiliriz.
Bundan kaçınmanın bir yolu var mı? MemoryMappedFile, kaynakları paylaşması gereken farklı işlemler arasında iletişim olarak kullanıyoruz. Bu süreçler bazen başlar ve durur. Şu anda bir tutamacı kapatır kapatmaz, hafızadaki dosyayı açamadık.
Açık çağrıları FILE_ATTRIBUTE_NORMAL kullanacak şekilde değiştirmeyi denedim, bu nedenle yalnızca oluşturma çağrısı CLOSE_ON_DELETE kullanıyor, ancak bu durum üzerinde hiçbir etkisi yok.
süreçleriniz koordine edilmeli ve sadece "master", delete_on_close bayrağını kullanmalıdır, master ilk başlatılacak olan ve sonuncu kapanacak olan. –
Yanlış soruna odaklanıyorsunuz. Evet, bu tür senaryolarda beklenmedik bir şekilde ölmekte olan bir süreçle baş etmek çok zordur. Silinmeyen bir dosyanın ötesinde birçok şey yanlış gidiyor, bir kilitlenme geleneksel. Sık sık başka hiçbir şey yapmayan bir koruma sürecine ihtiyacınız vardır, ancak herkesin, birlikte olmadıklarında işbirliği yapmasını ve temizlemesini sağlayın. Silinmeyen dosya, sorunun en azıdır, bir dahaki sefere alırsınız. –