SYMLINK(2) | Руководство программиста Linux | SYMLINK(2) |
symlink, symlinkat - создаёт новое имя для файла
#include <unistd.h>
int symlink(const char *target, const char *linkpath); #include <fcntl.h> /* определения констант of AT_* */ #include <unistd.h>
int symlinkat(const char *target, int newdirfd, const char *linkpath);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
symlink():
symlinkat():
Вызов symlink() создаёт символьную ссылку с именем linkpath, которая содержит строку target.
Символьные ссылки интерпретируются «на лету», как будто бы содержимое ссылки было подставлено вместо пути, по которому идёт поиск файла или каталога.
Символьные ссылки могут содержать компоненты пути .., которые (если используются в начале ссылки) ссылаются на родительский каталог того каталога, в котором находится ссылка.
Символьная ссылка (также известная как «мягкая ссылка») может указывать как на существующий, так и на несуществующий файлы; в последнем случае такая ссылка называется повисшей (dangling).
Права доступа символьной ссылки не имеют значения; принадлежность определённому владельцу игнорируется при переходе по ссылке, но проверяется при удалении или переименовании ссылки, а также ссылки в каталог с установленным закрепляющим (sticky) битом (S_ISVTX).
Если linkpath существует, то он не будет перезаписан.
Системный вызов symlinkat() работает также как системный вызов symlink(), за исключением случаев, описанных здесь.
Если в linkpath задан относительный путь, то он считается относительно каталога, на который ссылается файловый дескриптор newdirfd (а не относительно текущего рабочего каталога вызывающего процесса, как это делается в symlink()).
Если в linkpath задан относительный путь и значение newdirfd равно AT_FDCWD, то linkpath рассматривается относительно текущего рабочего каталога вызывающего процесса (как symlink()).
Если в linkpath задан абсолютный путь, то newdirfd игнорируется.
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
В symlinkat() дополнительно могут возникнуть следующие ошибки:
Системный вызов symlinkat() был добавлен в ядро Linux версии 2.6.16; поддержка в glibc доступна с версии 2.4.
symlink(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
symlinkat(): POSIX.1-2008.
Не выполняется проверка target.
При удаление имени, на который ссылается символьная ссылка, произойдёт удаление файла (если только у него нет других жёстких ссылок). Если такое поведение нежелательно, используйте link(2).
В старых ядрах, где symlinkat() отсутствует, обёрточная функция glibc использует symlink(). Если linkpath является относительным путём, то glibc собирает путь относительно символической ссылки в /proc/self/fd, которая соответствует аргументу newdirfd.
ln(1), namei(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7)
2017-09-15 | Linux |