relibc получила пять функций семейства at и впервые открыла openat приложениям

20.04.2026

В relibc реализованы faccessat, fchownat, unlinkat, symlinkat и linkat, а openat впервые выставлен в пользовательский API. Это заметный шаг в POSIX-совместимости: файловые операции перестали быть привязаны к текущему каталогу.

Что за семейство at

Классические файловые вызовы open, unlink, link работают с относительным путём от текущего каталога процесса. Это давнее упрощение, из-за которого одна и та же программа в разных рабочих каталогах работает с разными файлами, а библиотечный код вынужден сохранять и восстанавливать каталог через chdir — что небезопасно в многопоточном процессе.

Функции с суффиксом at решают это явной передачей дескриптора каталога: openat(dir_fd, path). Путь разрешается относительно каталога, который указан дескриптором, а не текущего. Родственная функция faccessat проверяет права доступа относительно такого каталога.

Что появилось

faccessat — проверка прав доступа к файлу относительно каталога;

fchownat — смена владельца и группы относительно каталога;

unlinkat — удаление файла или каталога относительно каталога;

symlinkat — создание символической ссылки с указанием каталога для самой ссылки и для цели отдельно;

linkat — создание жёсткой ссылки с указанием каталогов для обоих концов;

openat — открытие файла относительно каталога; раньше функция существовала внутри libc, но не была доступна приложениям.

В тот же день добавлены faccessat и fchownat; для fchownat 29 апреля отдельно исправлено поведение при передаче обоих идентификаторов в значении «не менять».

Почему это важно именно разработчику на Rust

Именно эти функции вызывает код на Rust через крейт libc и крейты поверх него. До этого openat был недоступен, и программы, которым нужен был каталог помимо текущего, шли обходным путём через chdir — что в многопоточном коде небезопасно.

То же касается переносимости: код, написанный под Linux и опирающийся на *at, на Redox просто не собирался. Теперь собирается.

Оригинал

Коммиты add unlinkat(2), symlinkat(2), linkat(2) and expose openat(2) и add faccessat(2) and fchownat(2) от 20 апреля 2026 года в репозитории redox-os/relibc

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