table of contents
LINK(2) | Руководство программиста Linux | 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)
2008-08-21 | Linux |