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 :
addressest aligné sur la page size.- Si
MapFlags::FIXEDest dansflags, les mappings existants à cette adresse peuvent être détruits. - Préférer
MapFlags::FIXED_NOREPLACEpour obtenirEEXISTen 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 contenirFIXEDouFIXED_NOREPLACE).fd: FD fichier optionnel (Nonepour mapping anonyme).offset: offset dans le fichier (0 pour mapping anonyme).
§Errors
EINVAL: adresse non alignée ou flags invalides.EEXIST: adresse occupée etFIXED_NOREPLACEest 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");