Scroll to navigation

symlink(2) System Calls Manual symlink(2)

ИМЯ

symlink, symlinkat - создаёт новое имя для файла

LIBRARY

Standard C library (libc, -lc)

СИНТАКСИС

#include <unistd.h>
int symlink(const char *target, const char *linkpath);
#include <fcntl.h>           /* определения констант 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():


Since glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Before glibc 2.10:
_ATFILE_SOURCE

ОПИСАНИЕ

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

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

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

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

The permissions of a symbolic link are irrelevant; the ownership is ignored when following the link (except when the protected_symlinks feature is enabled, as explained in proc(5)), but is checked when removal or renaming of the link is requested and the link is in a directory with the sticky bit (S_ISVTX) set.

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

symlinkat()

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

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

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

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

See openat(2) for an explanation of the need for symlinkat().

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

Нет прав на запись в каталог, содержащийся в linkpath, или в одном из каталогов в linkpath не разрешён поиск (смотрите также path_resolution(7)).
(symlinkat()) linkpath is relative but newdirfd is neither AT_FDCWD nor a valid file descriptor.
Исчерпана пользовательская квота на ресурсы файловой системы. Ресурсами могут быть иноды или дисковые блоки, в зависимости от реализации файловой системы.
linkpath уже существует.
Значение target или linkpath указывают за пределы доступного адресного пространства.
Произошла ошибка ввода-вывода.
Во время определения linkpath встретилось слишком много символьных ссылок.
Слишком длинное значение аргумента target или linkpath.
Компонент пути linkpath не существует или является повисшей символьной ссылкой или значение target или linkpath равно пустой строке.
(symlinkat()) linkpath is a relative pathname and newdirfd refers to a directory that has been deleted.
Недостаточное количество памяти ядра.
На устройстве, содержащем файл, нет места для создания нового элемента каталога.
Компонент пути, использованный как каталог в linkpath, в действительности таковым не является.
(symlinkat()) linkpath is relative and newdirfd is a file descriptor referring to a file other than a directory.
Файловая система, содержащая linkpath, не поддерживает создание символьных ссылок.
linkpath расположен в файловой системе, доступной только для чтения.

ВЕРСИИ

symlinkat() was added in Linux 2.6.16; library support was added in 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), namei(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), unlink(2), path_resolution(7), symlink(7)

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.

4 декабря 2022 г. Linux man-pages 6.02