mmap işlevi dosyatanıtıcı ile açılan dosya için yeni bir eşlem oluşturur. Eşlem (konum)'dan başlar, (konum + uzunluk - 1) de biter. dosyatanıtıcı ile belirtilen dosya için dosya kapatıldığında bile kaldırılmayan yeni bir referans oluşturur.
adres ile eşlem için tercih edilen adres belirtilir. NULL tercih belirtilmediğini gösterir. Adreste evvelce bir eşlem varsa özdevinimli olarak kaldırılır. MAP_FIXED seçeneği kullanmasanızda belirttiğiniz adres yine de değiştirilmeyebilir.
izinler ne çeşit erişime izin verildiğini belirten seçenekleri içerir. Bunlar sırayla okuma, yazma ve çalıştırma izinlerini belirten
PROT_READ,
PROT_WRITE ve
PROT_EXEC seçenekleri olabilir. Belirtilmeyen bir iznin kullanılmaya çalışılması bir parçalama arızasına (segfault) yol açacaktır (bkz.
Yazılım Hatalarının Sinyalleri).
Çoğu donanım tasarımının okuma izni olmadan yazma iznini desteklemediğini ve çoğunun okuma ve çalıştırma izinleri bakımından bir ayrım yapmadığını aklınızdan çıkarmayın. Bu bakımdan, istediğinizden daha geniş yetkilere sahip olabileceğiniz gibi sadece yazılabilir olarak belirttiğiniz dosyalara PROT_READ kullanmadığınız takdirde erişemeyebileceğinizi de unutmayın.
seçenekler eşlemin doğasını denetleyen seçenekleri içerir. Burada MAP_SHARED veya MAP_PRIVATE seçeneklerinden biri belirtilmelidir.
Bunlar:
- MAP_PRIVATE
Eşlemle ilgili dosyaya yazılamasa da bellek bölgesine yazılabileceğini belirtir. Bunun yerine, süreç için bir kopya yapılır ve normal olarak bellek azsa bölge takaslanır. Başka hiçbir süreç değişiklikleri görmez.
Özel eşlemler üzerlerine yazıldıklarında fiilen sıradan belleğe konulduğundan eğer bu kipi PROT_WRITE ile kullanıyorsanız eşlemlenmiş bölgenin tamamının kopyası için yeterli sanal bellek olmalıdır.
- MAP_SHARED
bölgeye yapılan yazmaların dosyaya da yazılacağını belirtir. Değişiklikler aynı dosyayı eşlemlemiş olan diğer süreçlerle anında paylaşılacaktır.
Asıl yazma işlemlerinin herhangi bir anda olabileceğini unutmayın. Diğer süreçlerin geleneksel G/Ç işlemlerini kullanarak dosyanın tutarlı bir görünümünü almaları önemliyse, aşağıda açıklanan msync işlevini kullanmanız gerekir.
- MAP_FIXED
Sistemin eşlem adresi olarak adres ile belirtilen adresi kullanması için zorlar. Bu olmazsa işlev başarısız olur.
- MAP_ANONYMOUS
- MAP_ANON
Sisteme, bir dosyaya bağlı olmayan bir anonim eşlem oluşturmasını söyler. dosyatanıtıcı ve konum yoksayılır ve bölge sıfırlarla ilklendirilir.
Anonim eşlemler bazı sistemlerde özdevimli ayırma yapılabilen bellek bölgesinin genişletilmesinde temel ilkel olarak kullanılır. Ayrıca bir dosya oluşturmadan çok sayıda görev arasında veri paylaşmak için de kullanışlıdır.
Bazı sistemlerde büyük bellek blokları ile çalışırken özel anonim eşlemleri kullanmak malloc kullanmaktan daha verimlidir. GNU C sisteminde malloc gerektiği takdirde özdevinimli olarak mmap işlevini kullanır.
mmap normalde yeni eşlemin adresi ile döner. -1 dönüş değeri bir hata oluştuğunu belirtir.
Olası hatalar:
- EINVAL
Ya adres işe yaramaz ya da belirtilen seçenekler tutarsız
- EACCES
dosyatanıtıcı belirtilen izinler ile açılmadı
- ENOMEM
Ya işlem için yeterli bellek yok ya da süreç, adres alanı dışında
- ENODEV
Bu dosya belleğe eşlemlenen türde değil
- ENOEXEC
Dosya belleğe eşlemlemeyi desteklemeyen bir dosya sisteminde