pub struct EventFd(/* private fields */);Expand description
FD eventfd (cf. eventfd2(2)).
Encapsule un compteur kernel 64 bits exposé comme descripteur de fichier. Pattern privilégié pour les notifications légères inter-threads ou inter-processus, et pour l’intégration avec io_uring (wakeup du reactor).
La fermeture du FD est automatique à la destruction (RAII via
[OwnedFd]).
Implementations§
Source§impl EventFd
impl EventFd
Sourcepub fn as_fd(&self) -> BorrowedFd<'_>
pub fn as_fd(&self) -> BorrowedFd<'_>
Vue empruntée du FD sous-jacent.
Utile pour passer le FD à d’autres syscalls (poll, io_uring…) sans transférer l’ownership.
Sourcepub fn read(&self) -> Result<u64, Errno>
pub fn read(&self) -> Result<u64, Errno>
Lit la valeur courante du compteur.
Mode normal (sans SEMAPHORE) : retourne la valeur courante et
remet le compteur à zéro. Bloque si le compteur est zéro (sauf
si NONBLOCK est positionné).
Mode sémaphore (avec SEMAPHORE) : retourne 1 et décrémente
de 1. Bloque si le compteur est zéro.
§Errors
EAGAIN: compteur à zéro et le FD est en mode non-bloquant.EINTR: interrompu par un signal (ADR-021 convention 2 : pas de retry automatique).EBADF: FD invalide (ne se produit pas siEventFdbien formé).
§Examples
use air_sys_syscall::ipc::eventfd2;
use air_sys_types::EventFdFlags;
let efd = eventfd2(0, EventFdFlags::empty()).expect("eventfd2");
efd.write(5).expect("write");
let val = efd.read().expect("read");
assert_eq!(val, 5);Sourcepub fn write(&self, value: u64) -> Result<(), Errno>
pub fn write(&self, value: u64) -> Result<(), Errno>
Incrémente le compteur de value.
Bloque si le compteur atteindrait u64::MAX - 1 (espace épuisé).
Retourne immédiatement EAGAIN si non-bloquant.
§Parameters
value: incrément. La valeur maximale autorisée par incrémentation estu64::MAX - 1;u64::MAXest interdit par le kernel.
§Errors
EINVAL:value==u64::MAX(débordement interdit).EAGAIN: le FD est non-bloquant et l’incrément bloquerait.EINTR: interrompu par un signal (pas de retry automatique).
§Examples
use air_sys_syscall::ipc::eventfd2;
use air_sys_types::EventFdFlags;
let efd = eventfd2(0, EventFdFlags::empty()).expect("eventfd2");
efd.write(1).expect("write notification");