Skip to main content

mmap_fixed

Function mmap_fixed 

Source
pub unsafe fn mmap_fixed(
    address: NonNull<u8>,
    length: usize,
    prot: ProtectionFlags,
    flags: MapFlags,
    fd: Option<BorrowedFd<'_>>,
    offset: u64,
) -> Result<MappingPointer, Errno>
Expand description

Mappe à une adresse spécifique.

Wrappeur de mmap(2) avec MAP_FIXED ou MAP_FIXED_NOREPLACE. unsafe car peut écraser des mappings existants si MAP_FIXED est utilisé sans FIXED_NOREPLACE.

§Safety

L’appelant doit garantir que :

  1. address est aligné sur la page size.
  2. Si MapFlags::FIXED est dans flags, les mappings existants à cette adresse peuvent être détruits.
  3. Préférer MapFlags::FIXED_NOREPLACE pour obtenir EEXIST en cas de collision plutôt que d’écraser silencieusement.

§Parameters

  • address : adresse de base souhaitée.
  • length : longueur en octets.
  • prot : protections.
  • flags : flags de mapping (doit contenir FIXED ou FIXED_NOREPLACE).
  • fd : FD fichier optionnel (None pour mapping anonyme).
  • offset : offset dans le fichier (0 pour mapping anonyme).

§Errors

  • EINVAL : adresse non alignée ou flags invalides.
  • EEXIST : adresse occupée et FIXED_NOREPLACE est utilisé.
  • ENOMEM : mémoire insuffisante.

§Examples

use air_sys_syscall::mem::mmap_fixed;
use air_sys_types::mem::{MapFlags, MappingPointer, ProtectionFlags};
use core::ptr::NonNull;

// unsafe : peut écraser des mappings existants si MAP_FIXED utilisé
let ptr = unsafe {
    mmap_fixed(
        address,
        4096,
        ProtectionFlags::READ | ProtectionFlags::WRITE,
        MapFlags::FIXED_NOREPLACE | MapFlags::PRIVATE | MapFlags::ANONYMOUS,
        None,
        0,
    )
}.expect("mmap_fixed");