int link(const char *oldpath, const char *newpath);
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.|
|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.|
|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.