relibc научилась управлять терминалом: tcdrain, tcflow и tcsendbreak
07.07.2026В relibc появились реализации tcdrain, tcflow и tcsendbreak — трёх функций termios, которых на Redox до этого не было. Программы на Rust, работающие с последовательным портом или псевдотерминалом, получают полный набор управления потоком.
Зачем нужны эти три функции
Все три — из POSIX, и все три управляют тем, как терминал отдаёт данные в физический канал.
tcdrain(fd) блокирует вызывающий поток, пока все уже записанные байты не уйдут в устройство. Без неё write возвращается сразу после копирования в буфер ядра, и данные могут быть потеряны при аварийном завершении процесса или при перезагрузке.
tcflow(fd, action) останавливает и возобновляет передачу: TCOOFF приостанавливает вывод, TCOON продолжает, TCIOFF и TCION делают то же для ввода. Это позволяет программе временно перехватывать поток — например, чтобы перенаправить его на свой терминальный эмулятор.
tcsendbreak(fd, duration) отправляет последовательность BREAK на линии: ноль битов в течении заданного времени плюс пробел. По этому сигналу модем и последовательное оборудование сбрасывают состояние линии, и по нему же управляют потоком в канале.
Что именно изменилось
Работа затронула только слой relibc: обработчики ioctl в sys_ioctl. Ядро менять не пришлось — нужные команды оно уже понимало, не хватало обвязки на стороне libc. Функции экспортированы, поэтому их видят и программы на C, и код на Rust, идущий через libc.
Практическая польза
Возможность дренировать терминал перед завершением работы важна там, где потеря последних байтов обрывает протокол: загрузчик, прошивальщик, программа настройки оборудования. Управление потоком через tcflow — основа telnet-подобных решений и отладочных мостов. BREAK до этого нельзя было отправить вообще никак.
Оригинал
Коммит sys_ioctl: add Redox implementations for tcdrain, tcflow, and tcsendbreak в репозитории redox-os/relibc; сводка «This Month in Redox — July 2026», раздел «Relibc Improvements»
Упоминаний: 1 · Просмотров: 2