symlink(2) - Linux 手册页
名称
symlink - 为文件创建新的名称
概要
#include <unistd.h>
int symlink(const char *oldpath, const char *newpath);
glibc 的功能测试宏要求(参见 feature_test_macros(7))
- symlink():
- _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE >= 200112L
描述
symlink() 创建一个名为 newpath 的符号链接,该链接包含字符串 oldpath。
符号链接在运行时被解释为,如果链接的内容被替换到正在遵循的路径中以查找文件或目录,则会发生的情况。
符号链接可能包含 .. 路径组件,如果这些组件出现在链接的开头,则它们将引用链接所在目录的父目录。
符号链接(也称为软链接)可以指向现有文件,也可以指向不存在的文件;后者称为悬挂链接。
符号链接的权限是无关紧要的;所有权在跟随链接时会被忽略,但在请求删除或重命名链接时会被检查,并且链接位于带有粘滞位 (S_ISVTX) 设置的目录中时也会被检查。
如果 newpath 存在,它将不会被覆盖。
返回值
成功时返回零。出错时返回 -1,并相应地设置 errno。
错误
- EACCES
拒绝访问包含 newpath 的目录的写入权限,或者 newpath 的路径前缀中的某个目录不允许搜索权限。(另请参阅 path_resolution(7)。)
EDQUOT
用户在文件系统上的资源配额已用尽。这些资源可能是 inode 或磁盘块,具体取决于文件系统实现。
EEXIST
newpath 已经存在。
EFAULT
oldpath 或 newpath 指向您可访问地址空间之外的位置。
EIO
发生了 I/O 错误。
ELOOP
在解析 newpath 时遇到了过多的符号链接。
- ENAMETOOLONG
- oldpath 或 newpath 太长。
- ENOENT
newpath 中的一个目录组件不存在或是一个悬挂的符号链接,或者 oldpath 是一个空字符串。
ENOMEM
内核内存不足。
ENOSPC
包含该文件的设备没有足够的空间来创建新的目录条目。
- ENOTDIR
- 用作 newpath 中目录的组件实际上不是一个目录。
- EPERM
包含 newpath 的文件系统不支持创建符号链接。
EROFS
newpath 位于只读文件系统上。
符合
SVr4, 4.3BSD, POSIX.1-2001。
说明
不对 oldpath 进行检查。
删除由 symlink 引用的名称实际上会删除该文件(除非它还有其他硬链接)。如果不需要这种行为,请使用 link(2)。
参见
ln(1), lchown(2), link(2), lstat(2), open(2), readlink(2), rename(2), symlinkat(2), unlink(2), path_resolution(7), symlink(7)