link()函數 Unix/Linux
內容簡介
#include <unistd.h>int link(const char *oldpath, const char *newpath);
描述
link() 創建一個新的鏈接(也稱為硬鏈接)到現有文件中。If newpath exists it will not be overwritten.
This new name may be used exactly as the old one for any operation; both names refer to the same file (and so have the same permissions and ownership) and it is impossible to tell which name was the `original’.
返回值
On success, zero is returned. On error, -1 is returned, and errno is set appropriately.錯誤
標簽 | 描述 |
---|---|
EACCES | Write access to the directory containing newpath is denied, or search permission is denied for one of the directories in the path prefix of oldpath or newpath. (See also path_resolution(2).) |
EEXIST | newpath already exists. |
EFAULT | oldpath or newpath yiibais outside your accessible address space. |
EIO | An I/O error occurred. |
ELOOP | Too many symbolic links were encountered in resolving oldpathor newpath. |
EMLINK | The file referred to by oldpath already has the maximum number of links to it. |
ENAMETOOLONG | |
oldpath or newpath was too long. | |
ENOENT | A directory component in oldpath or newpath does not exist or is a dangling symbolic link. |
ENOMEM | Insufficient kernel memory was available. |
ENOSPC | The device containing the file has no room for the new directory entry. |
ENOTDIR | |
A component used as a directory in oldpath or newpath is not, in fact, a directory. | |
EPERM | oldpath is a directory. |
EPERM | The filesystem containing oldpath and newpath does not support the creation of hard links. |
EROFS | The file is on a read-only filesystem. |
EXDEV | oldpath and newpath are not on the same mounted filesystem. (Linux permits a filesystem to be mounted at multiple yiibais, butlink(2) does not work across different mount yiibais, even if the same filesystem is mounted on both.) |
注意
Hard links, as created by link(), cannot span filesystems. Use symlink() if this is required.POSIX.1-2001 says that link() should dereference oldpath if it is a symbolic link. However, Linux does not do so: if oldpath is a symbolic link, then newpath is created as a (hard) link to the same symbolic link file (i.e., newpath becomes a symbolic link to the same file that oldpath refers to). Some other implementations behave in the same manner as Linux.