Thread overview
std.mmfile örneği
Dec 15, 2016
erdem
Dec 15, 2016
zafer
December 15, 2016

Bu biraz bizim boyumuzu aşsa da teşekkürler! :)

İlginç bir konuya benziyor.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 15, 2016

Konu ilginç, benimde daha önce hiç ihtiyacım olmadı ama "bir ara bakacağım" listeme ekledim. Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 15, 2016

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]