Forum: Ders Arası RSS
std.mmfile örneği
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4448 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: std.mmfile örneği
std.mmfile, işletim sisteminin memory mapped file olanağının arayüzü. Belirli bir bellek alanını bir dosyaya bağlamaya yarıyor. Bellek bölgesi aynen dosya içeriği oluyor; değişiklikler dosyada da aynen beliriyor.

Benim bildiğim temelde iki yararı var:

  • Ne kadar büyük olursa olsun, dosyaya tembel olarak erişiliyor. Örneğin, yalnızca belirli bir noktasına erişilince işletim sistemi olasılıkla yalnızca o noktasını ve çevresini belleğe alıyor.

  • Birden fazla program aynı dosyayı kullandıklarında çok hızlıca haberleşebiliyorlar. Örneğin, birisi yazıyor ve diğeri okuyor.
import std.stdio;
import std.algorithm;
import std.mmfile;
 
struct Kayıt {
    int i;
    double d = 0;
}
 
enum adet = 5;
enum uzunluk = adet * Kayıt.sizeof;
 
void main() {
    auto mm = new MmFile("mmfile_deneme", MmFile.Mode.readWrite, uzunluk, null);
 
    void[] baytlar = mm[];    // void[] kullanışsızdır
    Kayıt* ilkElemanaGösterge = cast(Kayıt*)(baytlar.ptr);
    Kayıt[] kayıtlar = ilkElemanaGösterge[0..adet];
 
    writefln("önce : %(%s, %)", kayıtlar);
    kayıtlar.each!((ref k) => k.i++);    // 'ref' önemli
    writefln("sonra: %(%s, %)", kayıtlar);
}
Programı çalıştırdığınızda Kayıt dizisi mmfile_deneme dosyasına yazılacak ve içindeki elemanların i üyelerinin değeri her seferinde değişecek. Göreceğiniz gibi, son yazılan değerler korunmuş olacak.

Ali
erdem (Moderatör) #2
Üye Tem 2009 tarihinden beri · 910 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu biraz bizim boyumuzu aşsa da teşekkürler! :)

İlginç bir konuya benziyor.
zafer #3
Üye Tem 2009 tarihinden beri · 695 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu ilginç, benimde daha önce hiç ihtiyacım olmadı ama "bir ara bakacağım"  listeme ekledim. Teşekkürler.
https://github.com/zafer06 - depo
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-08-23, 18:17:37 (UTC -07:00)