relibc получила fexecve, _Fork, timespec_get и управление размером окна терминала

21.12.2025

В relibc реализован набор недостававших функций: fexecve, _Fork, timespec_get, timespec_getres, clock_getres, tcgetwinsize, tcgetsid и пределы POSIX.

Что это за функции и зачем они нужны

fexecve — выполнить указанный файл, не создавая нового процесса. Обычный execve требует вилку, то есть создания нового процесса и копирования его памяти, а потом замены образа. fexecve работает иначе и дешевле. В Linux он тоже существует, и переносимый код на нём опирается.

_Fork — то же, что fork, но без запуска обработчиков из pthread_atfork. Обработчики нужны библиотекам для приведения состояния в порядок после вилки, но в редких случаях их выполнение нежелательно — и тогда стандартного fork недостаточно.

timespec_get, timespec_getres и clock_getres — функции стандартного C для работы со временем: получить текущее время, получить и поставить точность отсчёта таймера. Точность таймера влияет на то, как часто система будит поток по таймауту, и на счётчик событий.

tcgetwinsize и tcgetsid — размер окна терминала и идентификатор сеанса. Ими пользуется любая программа, рисующая полноэкранный интерфейс: она обязана знать, сколько строк и столбцов доступно.

Почему это не «просто POSIX»

Каждая такая функция снимает причину, по которой код на Rust не собирается или работает неверно под Redox. Крейты libc и nix обращаются к этим функциям при сборке под Redox, а если функции нет, приходится идти обходным путём — и это видно в коде как «специальная обработка Redox».

Полнота стандартной библиотеки определяет, сколько кода переносится вообще без изменений. Каждая реализованная функция поднимает эту долю.

Оригинал

Коммиты в репозитории redox-os/relibc: fexecve от 7 декабря, _Fork от 19 декабря, clock_getres в ядре 21 декабря. Сводка «This Month in Redox — December 2025», раздел «Relibc Improvements»

Упоминаний: 1 · Просмотров: 2