symlink

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():
           _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200112L
               || /* в версии glibc <= 2.19: */ _BSD_SOURCE

       symlinkat():
           Начиная с glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           До glibc 2.10:
               _ATFILE_SOURCE

ОПИСАНИЕ
       Вызов symlink() создаёт символьную ссылку с именем linkpath, которая
       содержит строку target.

       Символьные ссылки интерпретируются «на лету», как будто бы содержимое
       ссылки было подставлено вместо пути, по которому идёт поиск файла или
       каталога.

       Символьные ссылки могут содержать компоненты пути .., которые (если
       используются в начале ссылки) ссылаются на родительский каталог того
       каталога, в котором находится ссылка.

       Символьная ссылка (также известная как «мягкая ссылка») может указывать
       как на существующий, так и на несуществующий файлы; в последнем случае
       такая ссылка называется повисшей (dangling).

       Права доступа символьной ссылки не имеют значения; принадлежность
       определённому владельцу игнорируется при переходе по ссылке, но
       проверяется при удалении или переименовании ссылки, а также ссылки в
       каталог с установленным закрепляющим (sticky) битом (S_ISVTX).

       Если linkpath существует, то он не будет перезаписан.

   symlinkat()
       Системный вызов symlinkat() работает также как системный вызов symlink(),
       за исключением случаев, описанных здесь.

       Если в linkpath задан относительный путь, то он считается относительно
       каталога, на который ссылается файловый дескриптор newdirfd (а не
       относительно текущего рабочего каталога вызывающего процесса, как это
       делается в symlink()).

       Если в linkpath задан относительный путь и значение newdirfd равно
       AT_FDCWD, то linkpath рассматривается относительно текущего рабочего
       каталога вызывающего процесса (как symlink()).

       Если в linkpath задан абсолютный путь, то newdirfd игнорируется.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       При успешном выполнении возвращается 0. В случае ошибки возвращается -1,
       а errno устанавливается в соответствующее значение.

ОШИБКИ
       EACCES Нет прав на запись в каталог, содержащийся в linkpath, или в одном
              из каталогов в linkpath не разрешён поиск (смотрите также
              path_resolution(7)).

       EDQUOT Исчерпана пользовательская квота на ресурсы файловой системы.
              Ресурсами могут быть иноды или дисковые блоки, в зависимости от
              реализации файловой системы.

       EEXIST linkpath уже существует.

       EFAULT Значение target или linkpath указывают за пределы доступного
              адресного пространства.

       EIO    Произошла ошибка ввода-вывода.

       ELOOP  Во время определения linkpath встретилось слишком много символьных
              ссылок.

       ENAMETOOLONG
              Слишком длинное значение аргумента target или linkpath.

       ENOENT Компонент пути linkpath не существует или является повисшей
              символьной ссылкой или значение target или linkpath равно пустой
              строке.

       ENOMEM Недостаточное количество памяти ядра.

       ENOSPC На устройстве, содержащем файл, нет места для создания нового
              элемента каталога.

       ENOTDIR
              Компонент пути, использованный как каталог в linkpath, в
              действительности таковым не является.

       EPERM  Файловая система, содержащая linkpath, не поддерживает создание
              символьных ссылок.

       EROFS  linkpath расположен в файловой системе, доступной только для
              чтения.

       В symlinkat() дополнительно могут возникнуть следующие ошибки:

       EBADF  Значение newdirfd не является правильным файловым дескриптором.

       ENOENT Значение linkpath является относительным путём и newdirfd
              ссылается на каталог, который был удалён.

       ENOTDIR
              Значение linkpath содержит относительный путь и newdirfd содержит
              файловый дескриптор, указывающий на файл, а не на каталог.

ВЕРСИИ
       Системный вызов 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).

   Замечания по glibc
       В старых ядрах, где symlinkat() отсутствует, обёрточная функция glibc
       использует symlink(). Если linkpath является относительным путём, то
       glibc собирает путь относительно символической ссылки в /proc/self/fd,
       которая соответствует аргументу newdirfd.

СМОТРИТЕ ТАКЖЕ
       ln(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2),
       unlink(2), path_resolution(7), symlink(7)



Linux                              2016-03-15                         SYMLINK(2)