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).