pub struct MmapRegion { /* private fields */ }Expand description
Mapping mmap partageable et compatible io_uring : ses pages restent
valides tant qu’une opération io_uring en vol (madvise/futex_*) y
référence de la mémoire. Compté par référence — munmap au dernier
drop (la région et toutes les gardes de vivacité d’ops en vol).
Distinct de Mapping à dessein : Mapping reste l’usage synchrone
unique/zéro-coût ; MmapRegion est l’opt-in partageable (une allocation
Arc, cf. exception ADR-021 c.4 ci-dessus). Cloner incrémente le compteur
fort ; aucune copie de pages, seulement du partage de propriété.
Implementations§
Source§impl MmapRegion
impl MmapRegion
Sourcepub fn new_anonymous(
len: usize,
prot: ProtectionFlags,
flags: MapFlags,
) -> Result<Self, Errno>
pub fn new_anonymous( len: usize, prot: ProtectionFlags, flags: MapFlags, ) -> Result<Self, Errno>
Mapping anonyme partageable (équivalent mmap_anonymous rendant une
MmapRegion).
§Errors
Toute erreur de mmap(2) (cf. mmap_anonymous) : EINVAL, ENOMEM…
Sourcepub fn from_file(
fd: BorrowedFd<'_>,
len: usize,
prot: ProtectionFlags,
flags: MapFlags,
offset: u64,
) -> Result<Self, Errno>
pub fn from_file( fd: BorrowedFd<'_>, len: usize, prot: ProtectionFlags, flags: MapFlags, offset: u64, ) -> Result<Self, Errno>
Sourcepub fn from_mapping(mapping: Mapping, prot: ProtectionFlags) -> Self
pub fn from_mapping(mapping: Mapping, prot: ProtectionFlags) -> Self
Promeut un Mapping unique en région partageable : transfère la
responsabilité du munmap à l’inner partagé. Le Mapping est consommé
et neutralisé (son Drop ne munmap plus) → pas de double
munmap. Une seule allocation (l’inner).
prot explicite (obligatoire). Un Mapping nu ne mémorise pas ses
protections ; l’appelant doit fournir le prot avec lequel le
Mapping a été créé, sinon MmapRegion::bytes / MmapRegion::futex_word
décideraient de l’accessibilité sur une base fausse (référence qui
faute à l’usage). Il n’y a pas de défaut READ|WRITE : le prot
passé fait foi.
Sourcepub fn as_ptr(&self) -> *const u8
pub fn as_ptr(&self) -> *const u8
Pointeur brut vers le début du mapping (consommateurs avancés ; pas de
transfert de propriété — le munmap reste géré par la MmapRegion).
Sourcepub fn bytes(&self) -> &[u8]
pub fn bytes(&self) -> &[u8]
Tranche d’octets en lecture, bornée par construction. Renvoie une
tranche vide si la région n’est pas lisible (prot sans READ) —
jamais de référence vers de la mémoire inaccessible.
Sourcepub fn futex_word(&self, offset: usize) -> Result<&AtomicU32, Errno>
pub fn futex_word(&self, offset: usize) -> Result<&AtomicU32, Errno>
Référence à un mot futex (AtomicU32) à offset octets.
La référence est mutable par partage (AtomicU32 : store/load via
&) ; la rendre sur des pages non inscriptibles serait unsound (une
écriture fauterait). La validation amont (Principe 4) exige donc que la
région soit inscriptible (prot ⊇ WRITE), offset borné
(offset + 4 ≤ len) et aligné sur 4 (un futex est un u32 aligné) —
sinon la référence n’est pas rendue.
§Errors
[Errno::EINVAL] si la région n’est pas inscriptible, ou si offset est
hors bornes ou non aligné sur 4.
Trait Implementations§
Source§impl Clone for MmapRegion
impl Clone for MmapRegion
Source§fn clone(&self) -> MmapRegion
fn clone(&self) -> MmapRegion
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more