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