Expand description
Wrappers de la famille terminal (termios/tty).
Cf. docs/specs/layer-0/family-terminal.md et
ADR-060.
Tranche 2 — groupe « Attributs ». Les deux ioctls typés du cœur termios,
consommant le type [Termios] d’air-sys-types :
tcgetattr(TCGETS) : lit les attributs courants du terminal ;tcsetattr(TCSETS/TCSETSW/TCSETSF) : les applique selon une [SetAction] typée (mapping parmatchexhaustif — jamais l’arithmétiqueTCSETS + action, fragile, pointée par l’audit musl §8).
Tranche 3 — groupes « Contrôle de ligne » et « Taille fenêtre ». Les tc*
POSIX restants et les ioctls de dimension de fenêtre :
tcdrain(TCSBRK, argument1) : attend la transmission de la sortie ;tcflush(TCFLSH) : purge une [FlushQueue] (entrée/sortie/les deux) ;tcflow(TCXONC) : suspend/reprend le flux selon une [FlowAction] ;tcsendbreak(TCSBRK, argument0) : envoie un break (durée non paramétrée — honnêteté de contrat, cf. audit musl §6/§8) ;get_winsize/set_winsize(TIOCGWINSZ/TIOCSWINSZ) : lit/écrit la [Winsize] du terminal.
Tranche 4 — groupe « PTY ». Allocation d’une paire maître/esclave de pseudo-terminal :
open_pty_master: ouvre un nouveau maître via/dev/ptmx(dogfoodecrate::fs::openat) ;pty_number(TIOCGPTN) : numéro [PtyNumber] de l’esclave (/dev/pts/N) ;pty_unlock(TIOCSPTLCK) : déverrouille l’esclave (prérequis d’ouverture) ;pty_peer(TIOCGPTPEER) : ouvre directement l’esclave (anti-TOCTOU, Linux 4.13+) — évite la résolution du chemin/dev/pts/N.
Tranche 5 — groupe « Session / job-control ». Terminal de contrôle et groupes de premier plan :
tcgetpgrp(TIOCGPGRP) : groupe de premier plan du terminal (Option<Pid>— unpid_t0du kernel = aucun groupe, ADR-021 conv. 1) ;tcsetpgrp(TIOCSPGRP) : installe un groupe de premier plan typé ;session_id(TIOCGSID) : identifiant de session du terminal ;set_ctty(TIOCSCTTY, argument0) : fait du terminal le terminal de contrôle du leader de session appelant — sans vol (le volarg=1exigeCAP_SYS_ADMIN, hors périmètre — UNSUPPORTED) ;clear_ctty(TIOCNOTTY) : détache le terminal de contrôle.
Ces cinq-là exigent, pour leur chemin nominal, un terminal de contrôle
(que le kernel refuse hors leader de session) : ils sont donc validés dans un
enfant forké setsid (tests), et les lignes de leur bras Ok — exécutées
uniquement dans cet enfant — sont des exceptions CHILD-EXIT (ADR-035 ;
profil LLVM non flushé côté enfant, async-signal-safe — cf. process.rs).
Chaque opération est une fonction dédiée typée (ADR-021 conv. 3 : jamais
d’ioctl(fd, REQ, …) générique). Zéro allocation (le [Termios]/[Winsize]
vit sur la pile). EINTR est remonté tel quel à l’appelant (ADR-021 conv. 2),
aucun retry automatique — tcdrain est un point d’annulation (audit §3). Le
maître /dev/ptmx sert de tty réel dans les tests.
Functions§
- clear_
ctty clear_ctty(TIOCNOTTY) — détache le terminal de contrôle du processus appelant.- get_
winsize get_winsize(TIOCGWINSZ) — lit les dimensions courantes de la fenêtre du terminalfd.- open_
pty_ master open_pty_master— ouvre un nouveau maître de pseudo-terminal via/dev/ptmx.- pty_
number pty_number(TIOCGPTN) — numéro de l’esclave associé au maîtremaster.- pty_
peer pty_peer(TIOCGPTPEER) — ouvre directement l’esclave demasteret renvoie son descripteur.- pty_
unlock pty_unlock(TIOCSPTLCK, valeur0) — déverrouille l’esclave demaster.- session_
id session_id(TIOCGSID) — identifiant de session du terminalfd.- set_
ctty set_ctty(TIOCSCTTY, argument 0) — fait defdle terminal de contrôle du leader de session appelant.- set_
winsize set_winsize(TIOCSWINSZ) — impose les dimensionssizeà la fenêtre du terminalfd(le kernel émetSIGWINCHvers le groupe de premier plan).- tcdrain
tcdrain(TCSBRK, argument 1) — bloque jusqu’à ce que tous les octets déjà écrits versfdaient été transmis.- tcflow
tcflow(TCXONC) — suspend ou reprend le flux d’entrée ou de sortie defd.- tcflush
tcflush(TCFLSH) — purge (jette) les octets non traités de la (des) file(s) désignée(s) parqueue.- tcgetattr
tcgetattr(TCGETS) — lit les attributs courants du terminalfd.- tcgetpgrp
tcgetpgrp(TIOCGPGRP) — groupe de premier plan du terminalfd.- tcsendbreak
tcsendbreak(TCSBRK, argument 0) — transmet une séquence de bits0(condition BREAK) sur une ligne asynchrone.- tcsetattr
tcsetattr(TCSETS/TCSETSW/TCSETSF) — appliqueattributesau terminalfd, à l’instant indiqué paraction.- tcsetpgrp
tcsetpgrp(TIOCSPGRP) — installeprocess_groupcomme groupe de premier plan du terminalfd.