Skip to main content

dup3

Function dup3 

Source
pub fn dup3(
    old: BorrowedFd<'_>,
    new: RawFd,
    flags: Dup3Flags,
) -> Result<OwnedFd, Errno>
Expand description

Duplique le descripteur old vers le numéro new (dup3(2)), en fermant atomiquement new s’il était ouvert. Retourne le nouveau descripteur, possédé (OwnedFd, fermé au Drop).

Cf. docs/specs/layer-0/family-process.md. Variante moderne de dup2 (ADR-021) : les drapeaux sont explicites (Dup3Flags, seul O_CLOEXEC est valide). Cas d’usage couche 1 : rediriger les flux standard d’un enfant (dup3(pipe, STDOUT_FILENO, …)) juste avant l’exec.

À la différence de dup2, dup3 échoue (EINVAL) si old == new : pas de no-op silencieux. Le numéro new doit donc différer de old.

§Errors

  • Errno::EINVAL : flags invalides, ou old == new.
  • Errno::EBADF : new hors de la plage autorisée (> RLIMIT_NOFILE).
  • Errno::EBUSY : course (rare) avec open/dup concurrents sur new.
  • Errno::EINTR : interrompu par un signal (remonté tel quel, ADR-021 convention 2).