LINK(2)

ИМЯ
link - создаёт ссылку на файл

ОБЗОР
#include <unistd.h>

int link(const char *oldpath, const char *newpath);

ОПИСАНИЕ
link() создаёт новую ссылку (также называемую жёсткую ссылку) на существующий файл. Если newpath существует, то он не будет перезаписан. Это новое имя может использоваться как и старое для любых операций; оба имени ссылаются на один файл (и имеют одинаковые права и владельцев) и невозможно сказать какое имя считать "изначальным".

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

ОШИБКИ

EACCES
    Нет прав на запись в каталог, содержащий newpath, или в одном из каталогов пути до oldpath или newpath не разрешён поиск (см. также path_resolution(7)).

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

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

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

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

EMLINK
    На файл, на который указывает oldpath, уже создано максимальное количество ссылок.

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

ENOENT
    Компонент каталога в oldpath или newpath не существует или является повисшей ссылкой.

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

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

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

EPERM
    oldpath является каталогом.

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

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

EXDEV
    oldpath и newpath находятся не в одной смонтированной файловой системе. (Linux позволяет монтировать файловую систему в несколько точек, но link() не работает с отличающими точками монтирования, даже если в них смонтирована идентичная файловая система.)

СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, 4.3BSD, POSIX.1-2001 (но см. ЗАМЕЧАНИЯ).

ЗАМЕЧАНИЯ
Жёсткие ссылки, создаваемые link(), не могут располагаться в разных файловых системах. Если это необходимо, используйте symlink(2). В POSIX.1-2001 сказано, что link() должен разъименовывать oldpath, если он является символьной ссылкой. Однако, начиная с ядра версии 2.0, Linux также не поступает: если oldpath является символьной ссылкой, то newpath создаётся как (жёсткая) ссылка на файл этой символьной ссылки (т.е., newpath становится символьной ссылкой на файл, содержащий ссылку на oldpath). Некоторые другие реализации поступают также как Linux. В POSIX.1-2008 изменено описание link(), теперь разъименовывание символьной ссылки oldpath зависит от реализации. Для точного управления по обработке символьных ссылок при создании см. linkat(2).

ДЕФЕКТЫ
В файловых системах NFS возвращаемый код может быть неправильным, если сервер NFS выполнит создание ссылки и завершит работу до возврата результата операции. Используйте stat(2), чтобы выяснить была ли создана ссылка.

СМОТРИТЕ ТАКЖЕ
ln(1), linkat(2), open(2), rename(2), stat(2), symlink(2), unlink(2), path_resolution(7), symlink(7)