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