Aracılığıyla paylaş


Dosya Eşleme Nesnesi Oluşturma

Bir dosyayı eşlemenin ilk adımı, CreateFile işlevini çağırarak dosyayı açmaktır. Diğer işlemlerin dosyanın eşlenen bölümüne yazılamadığından emin olmak için dosyayı özel erişimle açmanız gerekir. Buna ek olarak, işlem artık dosya eşleme nesnesine ihtiyaç duymayana kadar dosya tanıtıcısı açık kalmalıdır. Özel erişim elde etmenin kolay bir yolu, CreateFilefdwShareMode parametresinde sıfır belirtmektir. CreateFile tarafından döndürülen tanıtıcı, CreateFileMapping işlevi ile bir dosya eşleme nesnesi oluşturmak için kullanılır.

CreateFileMapping işlevi, dosya eşleme nesnesine bir tanıtıcı döndürür. Bu tanıtıcı, paylaşılan belleğe erişebilmeniz için dosya görünümü oluşturulurken kullanılır. CreateFileMappingçağırdığınızda, bir nesne adı, dosyadan eşlenecek bayt sayısı ve eşlenen bellek için okuma/yazma izni belirtirsiniz. createFileMapping çağıran ilk işlem, dosya eşleme nesnesini oluşturur. Mevcut bir nesne için CreateFileMapping çağıran işlemler, mevcut nesneye bir tanıtıcı alır. GetLastError işlevini çağırarak CreateFileMapping oluşturma veya dosya eşleme nesnesini açma için başarılı bir çağrı yapılıp yapılmadığını anlayabilirsiniz. GetLastError oluşturma işlemine NO_ERROR ve sonraki işlemlere ERROR_ALREADY_EXISTS döndürür.

CreateFileMapping işlevi, CreateFile işlevinin dosyayı açarken belirttiği erişim bayraklarıyla çakışırsa başarısız olur. Örneğin, dosyayı okumak ve dosyaya yazmak için:

  • CreateFilefdwAccess parametresinde GENERIC_READ ve GENERIC_WRITE değerlerini belirtin.
  • CreateFileMappingfdwProtect parametresinde PAGE_READWRITE değerini belirtin.

Dosya eşleme nesnesi oluşturmak fiziksel belleği tahsis etmez, yalnızca ayırır.

Dosya Haritalama Boyutu

Dosya eşleme nesnesinin boyutu, eşlenen dosyanın boyutundan bağımsızdır. Ancak, dosya eşleme nesnesi dosyadan büyükse, sistem CreateFileMapping döndürülmeden önce dosyayı genişletir. Dosya eşleme nesnesi dosyadan küçükse, sistem dosyadan yalnızca belirtilen bayt sayısını eşler.

CreateFileMappingdwMaximumSizeHigh ve dwMaximumSizeLow parametreleri, dosyadan eşlenecek bayt sayısını belirtmenize olanak sağlar:

  • Dosyanın boyutunun değişmesini istemiyorsanız (örneğin, salt okunur dosyaları eşlerken), CreateFileMappingçağırın ve dwMaximumSizeHigh ve dwMaximumSizeLowiçin sıfır belirtin. Bunu yaptığınızda, dosyayla tam olarak aynı boyutta bir dosya eşleme nesnesi oluşturulur. Aksi takdirde, dosya eşleme nesneleri statik boyutta olduğundan tamamlanmış dosyanın boyutunu hesaplamanız veya tahmin etmeniz gerekir; oluşturulduktan sonra boyutları artırılamaz veya azaltılamaz. Bu şekilde uzunluğu sıfır olan bir dosyayı eşleme girişimi ERROR_FILE_INVALIDhata koduyla başarısız oluyor. Programlar, uzunluğu sıfır olan dosyaları test etmeli ve bu tür dosyaları reddetmelidir.

  • Adlandırılmış bir dosya tarafından yedeklenen dosya eşleme nesnesinin boyutu disk alanıyla sınırlıdır. Bir dosya görünümünün boyutu, kullanılabilir en büyük bitişik yedeklenmemiş sanal bellek bloğuyla sınırlıdır. Bu, işlem tarafından zaten ayrılmış olan sanal bellekten en fazla 2 GB daha azdır.

Seçtiğiniz dosya eşleme nesnesinin boyutu, bellek eşlemesi ile dosyanın ne kadar uzağında "görebileceğinizi" denetler. Boyutu 500 Kb olan bir dosya eşleme nesnesi oluşturursanız, dosyanın boyutu ne olursa olsun dosyanın yalnızca ilk 500 Kb'sine erişebilirsiniz. Daha büyük bir dosya eşleme nesnesi oluşturmak için size herhangi bir sistem kaynağına mal olmadığından, dosyanın tamamını görüntülemeyi beklemeseniz bile dosya boyutu olan bir dosya eşleme nesnesi oluşturun (dwMaximumSizeHigh ve dwMaximumSizeLowCreateFileMapping parametrelerini sıfıra ayarlayın). Sistem kaynaklarının maliyeti, görünümleri oluşturmak ve bunlara erişmekten kaynaklanır.

Dosyanın başında başlamayan bir bölümünü görüntüleyebilirsiniz. Daha fazla bilgi için bkz. Dosyaİçinde Görünüm Oluşturma.

Dosya Görünümü Oluşturma

Dosya İçinde Görünüm Oluşturma